github odin-lang/Odin dev-2026-10

6 hours ago

New Language Features

  • [#7664]: Allow bit_set to be backed by arrays of integers

New Compiler Improvements

Speedups

  • [#7720]: LLVM Backend Performance Improvements to Reduce Compile Times Part 1
  • [#7729]: LLVM Backend Performance Improvements to Reduce Compile Times Part 2
  • [#7747]: Compiler Performance Improvements to Reduce Compile Times Part 3
  • [#7685]: Complete Parapoly Rewrite + Race condition fixes
  • [#7694]: Make global checking codegen order-independent
  • [#7686]: Parse integer literals without allocating per digit and reject non digits in their exponent
  • [#7739]: Make radlink default linker on Windows
  • [#7701]: Multithread The Entire Semantic Checker
  • [#7728]: map performance improvements

General fixes and improvements

  • [#7654]: Experimental support for cross-linking Windows executables
  • [#7788]: Add the new -windows-sdk-root to the odin help build command
  • [#7497]: Fix #7488: -vet error in core_builtin_soa.odin when appending multiple empty structs to #soa[dynamic]
  • [#7500]: Fix #5851: Detect and error on chained offset_of expressions
  • [#7505]: Apply mojibake magic to test runner, too
  • [#7509]: Fix #7499: Add ctrl-c handler to run_subprocess
  • [#7070]: Fix vendor:ENet.Buffer data/length ordering issue
  • [#7524]: Fix alias nullptr ICE
  • [#7528]: intrinsics.type_elem_type() added case for Type_FixedCapacityDynamicArray
  • [#7531]: Improve error message for constant indexing
  • [#7530]: simd_abs codegen improvement + fix for unsigned integers
  • [#7545]: Fix #6917: LLVM IR va_arg instruction uses wrong stride for C varargs on Windows
  • [#7548]: Fixes simd_approx_recip and simd_approx_recip_sqrt
  • [#7549]: Fixes simd_select and simd_runtime_swizzle operand construction
  • [#7574]: Fix #7573: Check Enumerations iota fits explicit base type
  • [#7570]: Fix #7544: Constant bit_field field access returning zero value
  • [#7568]: Fix side_effects vs volatile typo in error message
  • [#7561]: Fixes #6888: SIMD gather/scatter and masked load/store randomly crashing the compiler
  • [#7550]: Fix syntax error type with -json-errors
  • [#7577]: Fix #location in global variable initializers
  • [#7582]: Fix #7581: Compiler crash when checking code with swizzled SOA fields
  • [#7605]: Fix #7604: Allow building at /
  • [#7607]: Fix #7598: Keep entity iteration valid across a scope map rehash
  • [#7623]: Add -file suggestion when main is duplicated or package names differ
  • [#7628]: Fix quadratic type checking case: don't cache polymorphic record specializations
  • [#7631]: Fix record instantiated poly proc on selector when used as a proc value
  • [#7629]: Fix #7596 and #7511
  • [#7621]: Fixes the attributes of the context parameter in dummy procedures
  • [#7641]: Fix field sorting for bit_field literals
  • [#7656]: Fix #7609: Emit union constants for non-constantable unions
  • [#7658]: Fixes #must_tail on WASM targets
  • [#7652]: Fix #6951 and #5214: $ procedure arguments matching the wrong instantiation
  • [#7639]: Fix #6302: Broadcasting arrays of matrices and matrices
  • [#7661]: Fix #7587: Full length swizzles through a pointer keeping the pointer type
  • [#7594]: Fix #7583: -strict-style requires comma before newline after proc parameters which have a default value
  • [#7588]: Fix #7427 and #7193: Error on OOB tuple element in compound literals
  • [#7668]: Fix #5318: Procedures passed to $ parameters share an instantiation's name
  • [#7666]: Add ExactValue_Rational to improve precision on compiler float computation
  • [#7602]: Adds lifetime markers for named locals
  • [#7674]: Fix #5105 and #5569: Deferred call in short circuits causes LLVM codegen failure
  • [#7682]: Fixes the nocapture attribute on LLVM >= 21
  • [#7679]: Fix #7477 and #7506: Casts between nested arrays of the same depth
  • [#7697]: Fix compound literals of array backed bit_fields
  • [#7692]: Disallows the "odin" calling convention with #must_tail
  • [#7706]: Fix #7430: Fixed capacity dynamic array literals lose their length
  • [#7709]: Fix #7708: Compare a polymorphic record's constant parameters by value in subst_unify
  • [#7711]: Fix #7700: Constant #soa field access yields the per-element field array; compare and canonicalize typeid constants
  • [#7716]: Fix intrinsics.procedure_of with parapoly specializations
  • [#7714]: Fixes #3995, #4337, #5950, #7197, and #7640: Handle globals initialized with the address of a non constant literal
  • [#7718]: Fix #7490: Preserve zero-initialized arrays in intrinsics.concatenate
  • [#7722]: Use a response file for MSVC-style linkers (link.exe and radlink.exe) when the command line exceeds the CreateProcess limit of 32KiB
  • [#7723]: Fix mark a generated polymorphic procedure before publishing it to other threads
  • [#7520]: Fix #soa pointer field access through using
  • [#7743]: Allow using on #soa pointers, and make the fields a using #soa pointer parameter promotes assignable
  • [#7746]: Fix -linker:radlink being rejected on Windows
  • [#7740]: Fix #7689: Incorrect debug source location at the end of if/else chains

New Packages

  • [#7523]: asm: Generalize memory operand syntax to a flat term list

Package Improvements

Speedups

  • [#7630]: core:strconv: Ported Eisel-Lemire's fast float algorithm to Odin
  • [#7672]: core:strconv: Second part of the Fast Float port (SWAR based scanning)
  • [#7725]: core:strconv: Adds a #config to opt out of fast float (and its table)
  • [#7726]: core:hash/xxhash: Add a few more #no_bounds_check to XXH3
  • [#7728]: base:runtime: map performance improvements

General fixes and improvements

  • [#7496]: core:sys/windows: Add bindings for advanced mouse/pointer/pen manipulation
  • [#7508]: vendor:windows/wasapi: Fixes
  • [#7516]: core:mem: Revert #6476, which misunderstood the mem.Scratch allocator's semantics
  • [#7517]: core:mem: Implement tests for the mem.Scratch allocator
  • [#7489]: core:simd/arm: Implement SIMD Arm Neon shift left
  • [#6787]: core:fmt: Improved fmt_os documentation
  • [#7527]: core:simd/x86: Fixed typo in avx.odin
  • [#7539]: vendor:curl (Linux): Remove import declarations for crypto libraries that differ by distro
  • [#7532]: core:sys/windows: Add line-drawing functions in gdi32.odin
  • [#7563]: core:simd/arm: Implement SIMD Arm Neon shift right
  • [#7576]: vendor:sdl3/ttf: Use [^]byte rather than cstring and add ExpandString wrapper
  • [#7572]: vendor:libc-shim: Replace mem_zero with null termination in strncpy
  • [#7565]: core:sys/windows: Add performance counter PSAPI bindings
  • [#7553]: vendor:box2d: Add missing GetVersion binding
  • [#7546]: vendor/box3d: Support BOX3D_SHARED on Windows
  • [#7543]: vendor:egl: Bind more procedures and constants
  • [#7599]: core:os: Fix the 0th env var being duplicated on Linux
  • [#7600]: vendor:OpenEXRCore Fixes
  • [#7536]: core:odin: Fix #7526: Handle triple quote/tick string
  • [#7603]: core:simd/arm: Implement SIMD Arm Neon zip unzip extract
  • [#7615]: base:runtime: Fix #7562: Windows AMD64 no-CRT stack probe support
  • [#7620]: core:dynlib: Improvements and explanations in example
  • [#7622]: core:strconv: Fixes three bugs in hex float parsing
  • [#7624]: core:math/big: Fix squaring path writing the denominator into the numerator
  • [#7633]: core:encoding/json: Size the unquote buffer for replaced invalid UTF-8
  • [#6722]: core:sys/linux: Fix Time_Val precision comment
  • [#7634]: core:crypto/_fiat: Fix P-256 fe_sqrt addition chain, unblocking compressed SEC1 point decoding
  • [#7627]: core:rexcode: Add 512bit vmovntdq(a)
  • [#7659]: core:encoding/base64: Add strict decoding options
  • [#7663]: core:simd/x86: Implement simd x86 avx2 avx512 shift logical
  • [#7632]: core:simd/arm: Implement simd arm neon transpose reverse
  • [#7579]: core:c: Fixes #7540: fastX type widths
  • [#7584]: core:sys/windows: Extend Win32 common dialog bindings
  • [#7610]: core:sys/windows: Fix #7547: Double-null-terminate path in SHFileOperationW
  • [#7665]: core:container/bit_array: Add create_from_enum helper. Improve documentation, fix examples.
  • [#7671]: core:container/xar: Fix chunk slot count capping Array capacity
  • [#7484]: core:sort: Document all public procedures and Interface types
  • [#7676]: core:crypto/aegis: Minor documentation cleanups
  • [#7673]: core:encoding/json: Removes @(private) from unmarshal_value for use in user unmarshalers
  • [#7590]: core:os: Allocate the long-path buffer in the caller's allocator
  • [#7320]: vendor:sdl3: WASM foreign import library configurable
  • [#7684]: core:rexcode: Changed append to append_elem for a sizable improvement
  • [#7683]: core:simd/x86: Implement simd x86 avx512 evex512
  • [#7690]: core:encoding/base64: Add unpadded base64 encoding
  • [#7695]: core:simd/x86: Implement simd x86 avx512 typo fix
  • [#7703]: core:encoding/csv: Preserve final CSV records in multiline mode
  • [#7704]: core:encoding/cbor: Fix bit_set byte order
  • [#7643]: vendor:sdl2: Add RenderSetVSync
  • [#7721]: core:sync/chan: Accept .Recv channels in chan.recv and chan.try_recv
  • [#7733]: core:odin: Fix parser assert with invalid for-in stmt
  • [#7731]: core:time/timezone: Preserve fractional timestamps in timezone conversions
  • [#7738]: core:math/linalg/glsl: Fix mix_vec4 and mix_dvec4 implementations
  • [#7753]: core:fmt: Fix incorrect number of bytes written returned when formatting floats with h/H
  • [#7751]: core:simd/x86: Implement simd x86 sse2 _mm_insert_epi16 fix
  • [#7755]: core:sys/windows: Add GetCursor and GetDpiForSystem
  • [#7756]: vendor:box3d: Fixing typo from userMateriald to userMaterialId

Miscellaneous

  • [#7495]: macOS Intel removed from CI tests and releases, due to general flakiness of the CI. Odin can still be built from source on Intel Macs.
  • [#7569]: Fix #7525: Add test coverage for inline-asm label definitions on AMD64
  • [#7670]: Update NetBSD CI from 2026Q1 -> 2026Q3
  • [#7707]: Adjust doc comments that misrender as CommonMark
  • [#7754]: Upgrade Ubuntu CI to LLVM 22
  • [#7744]: Update test_core_runtime.odin

Full Changelog: dev-2026-09...dev-2026-10

Don't miss a new Odin release

NewReleases is sending notifications on new releases.