v0.13.0
New Features
- LLVM C API integration for Windows through
-llvm-api
- Experimental Support for
-llvm-api
for Linux and MacOS union #maybe
directive- Built-in
Maybe
type, e.g.Maybe(int)
orMaybe(^T)
- Selector Call Expressions
x->y(123) == x.y(x, 123)
(useful for COM APIs) - Allow
.?
to unwrap any union depending on the inferred context - Remove
using import
not_in
replacednotin
- Relative pointers
#relative(i16) ^Foo
- Relative slices
#relative (i16) []Foo
- Add
"pure"
procedure types - Add new ternary expressions:
x if cond else y
and `x when cond else y - Support by-reference semantics for
for value_ref, i in &some_array
andfor key, value_ref in &some_map
- Allow map indices to be references
&m[key]
and return a valid pointer if exists otherwisenil
- Allow referencing a compound literal
&Foo{}
- Slice literals will use stack memory within a procedure and global memory in a global scope
- Add
-subsystem
flag for Windows - Allow shadowing for
-vet
with immutable parameters @(force)
/@(require)
attributes forforeign import
(they are equivalent)- Endian specific floats, i.e.
f32le
f64be
#optional_ok
for procedures- Improved
odin <command> help
-ignore-vs-search
- Support
--flag
as redundancy for-flag
- Add
-extra-linker-flags:<string>
- Add
#config
to replace#defined
- Restrict
#defined
within procedure bodies to remove possible race conditions - Remove the need for
type_of
,size_of
,align_of
, andoffset_of
to be keywords (now regular identifiers) - Strip
\r
from raw string literals - Experimental Support for WASM
- Add
-target:<string>
with fuzzy checking
Library Improvements
- Improve package os
- Add
package unicode
with basic letter querying - Add
utf8.string_to_runes
andutf8.runes_to_string
- Add more intrinsics (
cpu_relax
,alloca
,type_*
, etc) - Add
#const
to enforce constant procedure parameters to variable parameters - Add
package sys/windows
which will replacepackage sys/win32
in the future - Add more helpers to
package reflect
- Remove
context.stdout/stderr
- Add
package container
- Add more hashes
- More
package sync
features - More
package thread
features - New
mem.Allocator_Mode
sQuery_Features
andQuery_Info
Bug Fixes
- Numerous core library bug fixes
- Fix
defer
related bugs - Fix
__dynamic_array_reserve
edge cases with zero sized types - Improve System V ABI
- Fix name mangling for
@(private)
entities - Fix
time.now()
being one day out on leap years after the leap month