Skip to content

Odin v0.9.0

Compare
Choose a tag to compare
@gingerBill gingerBill released this 22 Nov 10:43
· 12152 commits to master since this release

New Features

  • package system
  • Improved PDB support with code inspection
  • typeid type (also a keyword)
  • type is not a keyword any more
  • opaque type
  • Parameteric polymorphic union type:
    • union(T: typeid, N: int) {int, T, [N]T}
  • bit_set type:
    • bit_set[Some_Enum];
    • bit_set['A' .. 'Z'];
    • bit_set[0..8; u16];
  • cstring type (useful for interfacing with C libraries)
  • in binary operator for map and bit_set types:
    • x in y
  • Parametric polymorphic signature changes with polymorphic names:
    • new :: proc($T: typeid) -> ^T {}
    • make_int_array :: proc($N: int) -> [N]int {}
    • foo :: proc($N: $I, $T: typeid) {}
  • auto_cast unary operator
  • Explicit inline and no_inline on procedure calls
  • deprecated attributes
  • Built-in procedures:
    • #defined
    • #assert compile time assert
    • expand_to_tuple for (fixed length) arrays
    • typeid_of
  • "intrinsics" package:
    • Atomics
  • Diverging procedures proc() -> ! (no return)
  • using Foo :: enum {A, B, C}; f := A;
  • Foo :: enum {A, B, C}; len(Foo)
  • New context features:
    • temp_allocator
    • logger (Still in development)
    • Assigning directly to context parameters creates a new context
    • (context is scope based)
  • New compiler flags:
    • -lld (use LLD as the linker on Windows)
  • Improved minimum dependency building
  • foreign import x {"foo.lib", "bar.lib"}

Removed Features

  • using in
  • Old import system (replaced with the package system)