Releases: odin-lang/Odin
Releases · odin-lang/Odin
dev-2023-03
New Language Features
- BREAKING CHANGE: Brand New Default
context.temp_allocator
Implementation- New version is a growing arena based approach
- Old version used an unsafe ring buffer
- IMPORTANT
free_all(context.temp_allocator)
must be called to clear the contents of the internal arena (unlike the previous ring buffer)- It is recommended that this is done per frame/cycle/etc
- New version is a growing arena based approach
expand_values()
- Built-in procedure which expands a
struct
or fixed-length array into multiple values
- Built-in procedure which expands a
Foo :: struct {x: f32, y: i32}
f := Foo{1, 2}
a, b := expand_values(f)
assert(a == 1 && b == 2)
- Allow comparisons between empty
struct{}
andunion{}
- Allow for assigning to fields through
using
in a compound literal
Foo :: struct {
using x: struct { // named `using` fields
y: int,
},
z: f32
using _: struct { // anonymous `using` fields
w: bool,
},
}
f := Foo{
y = 123, // equivalent to `x = {y = 123},`
z = 456,
w = true,
}
- Verbose error messages by default with optional ANSI colouring too:
Compiler Improvements
@(fini)
to complement its opposite@(init)
- Fix to
byval
parameters on Darwin SysV ABI which in turn fixes#by_ptr
- Rename to
runtime.Type_Info_Parameters
for procedures inputs and outputs - Fix issue that conflicts with constant parapoly procedure literals and
@(deferred_*)
- Numerous improvements to error messages
New Packages
Package Improvements
- Introduction of
time.tsc_frequency()
- Improvements to
core:mem/virtual
'sArena
- On
free_all
free all memory blocks except for the first one virtual.arena_destroy
will free all memory blocks including the first one (assuming Growing or Static)
- On
- Add
#optional_allocator_error
tomake_map
- Numerous improvements to the
vendor:directx
packages
dev-2023-02
New Language Features
Compiler Improvements
Compile Time Speed Optimizations
- Multithreaded frontend by default
- Using the new and improved work stealing thread pool system
- Fix numerous race conditions
- Replace many instances of MPMC queues with MPSC queues
- Replace many instances of
BlockingMutex
withRwMutex
- Replace many instances of
RecursiveMutex
withBlockingMutex
- Multithread backend when the experimental
-use-separate-modules
is used-use-separate-modules
turns each package into a separate translation unit (object file) and then links them all together. This allows LLVM be multithreaded at the translation unit stage (LLVM Module).-use-separate-modules
will not produce as good code compared to without it because of the multiple translation units.
- Improvements to the hash table related structures (
StringMap
,StringSet
,PtrMap
,PtrSet
) - Big improvement to compile times due to the above improvements
General fixes
- Improved type inference for ternary if expressions
- Remove
auto_cast
from procedure parameters - Fix bug with built-in matrix transpose caused by misalignment of the value
- Fix valgrind assembly generation
- Allow
when
statements withinforeign
blocks at the file scope
New Packages
Package Improvements
core:mem/virtual
Arena_Temp
improvementsarena_temp_ignore
allowing for ignoring of a temporary section if necessary
- Numerous bug fixes
dev-2023-01
New Language Features
Compiler Improvements
- Improvements to multiple return values ABI for Odin calling conventions
- Improved internal thread pool implementation (ready for next month's release)
- Futex usage too
- Numerous bug and typo fixes
New Packages
core:text/match
Package Improvements
- Make
sync
callscontextless
where possible - Add different variants for
sync.once_do
- Make
os.get_last_error
contextless - Numerous fixes to
core:fmt
dev-2022-12
New Language Features
- New
map
: High performance, cache-friendly, open-addressed Robin Hood hashing hash map data structure with various optimizations for Odin- PR #2181
- Smaller internal data structure than previously (4 pointers down from 7 pointers)
- SOA based memory layout
- Up to 4x-6x faster insertion and lookup on average
- Entries are stored in non-contiguous cell-layout which means no element straddles across a cache line
- Only one allocation per map rather than two (previously hashes and entries)
- Only requires
alloc_non_zeroed
andfree
internally
- Only requires
- Robin Hood hashing
- Smaller header information (
runtime.Map_Info
) for dynamic calls. - Allows for calling
delete_key
whilst iterating across the map
Compiler Improvements
- Add debug symbols for global constants for integers, booleans, enums, runes, and pointers
- Variables are namedspaced with
pkg::name
, orname
if built-in (or the initial package for convenience)
- Variables are namedspaced with
- Improvements to debug information generation
-default-to-nil-allocator
also enabled-no-dynamic-literals
- Improvements to
intrinsics.ptr_sub
code generation - Numerous bug fixes
New Packages
vendor:cgltf
Package Improvements
- Add
Allocator_Mode.Alloc_Non_Zeroed
- DirectX packages to use
bit_set
for flags where possible instead of just anenum
- Implement numerous
core:math
procedures in native Odin - Add
math.pow10
- Add
strings.write_(f16|f32|f64)
- Add
user_data: rawptr
tofilepath.Walk_Proc
dev-2022-11
New Language Features
-
Compiler Improvements
- Make
raw_data
an intrinsic rather than a@(builtin)
runtime procedure - Allow
transmute
to be constant for integers of the same internal endianness - Throw type checker error when scalar cast to non-square matrix
- Fix
#defined(I)
- Build script: Detect
which
and complain if not found - Add early LLVM > 14 detection, as LLVM 15 and above are not (yet) supported
- Remove previously deprecated
-opt
flag - Improve SysV ABI LLVM IR generation for development purposes
- Use direct parameter value in
lb_find_ident
when possible - Optimize
#caller_location
and#location
to use read only data section where possible - Ad-hoc pass source code location directly by pointer without stack copy
- Clarify
odin help
for-define
- Add
-minimum-os-version
for Darwin targets, e.g.-minimum-os-version:12.0.0
- Add
-target-features
flag to force extra LLVM options - Add safety check for #2161
New Packages
-
Package Improvements
- Update Darwin release map for
core:sys/info
- Unify
Static_Arena
andGrowing_Arena
intoArena
- Many improvements to
core:mem/virtual
in general - Add and correct various Windows, Darwin, glfw, objC and other bindings
- Allow for
N = -1
inwstring_to_utf8
- Add
core:math/rand.choice
- Heavily improve time handling on Windows for
time.now()
andos.File_Info
dev-2022-10
New Language Features
cap(Enum)
, equivalent tomax(Enum)-min(Enum)+1
ODIN_BUILD_PROJECT_NAME
constant//+build-project-name
build directiveintrinsics.type_convert_variants_to_pointers
- Add
helgrind
andvalgrind
support
Compiler Improvements
- Greatly improve error messages
- Preparations for Compiler Explorer support
- Use
uint
instead ofint
to improve bounds checking code generation - Replace
#optional_second
with#optional_allocator_error
- Remove extra pointer indirection
- Make
intrinsics.count_{ones,zeros,trailing_zeros,leading_zeros}
work at compile time - Improve
map
- Improve parapoly support for ^T to [^]$V and vice versa
- Various bugfixes
- Simplify win32 resource file linking
- Add Windows 32-bit build system error
- Add
help
command, so you can now useodin help build
in addition toodin build -help
- Improve macOS version detection for
odin report
New Packages
- Add
vendor:zlib
- Begin work on
core:debug/pe
to parse PE files - Add
core:sys/info
to query CPU, GPU, RAM, etc.
Package Improvements
- Add system:legacy_stdio_definitions.lib to
core:c
- Allow reading/writing files larger than
max(i32)
on Darwin - Allow skipping unused fields in
core:encoding/json
- Add parsing of +/-Inf and NaN to
core:strconv
- Add additional win32 imports and constants
- Fix typo in
map_insert
- Fix
libc.aligned_alloc
- Add
slice.enumerated_array
- Add serial comms support to
core:sys/windows
- Add complex support to
core:libc
- Correct json unmarshal of
map
s - Fix Darwin libs for
vendor:stb/image
- Added support for ID3D11InfoQueue to
vendor:directx
- Improve
core:mem/virtual
handling of out of memory on Windows - Simplify
core:io
by removing different unnecessary types and calls - Add the builtin procedures
abs
,clamp
,min
,max
tocore:math
as aliases
dev-2022-09
New Language Features
#soa
pointer type to ad with refactory to#soa
data types- e.g.
#soa ^#soa[]T
- e.g.
New Compiler Features
- Make
unreachable()
a built-in compiler-level procedure - Allow for
foo() or_else unreachable()
or other diverging procedures
Compiler Improvements
#load
can now optionally import the loaded file data as a different type than[]u8
#load(path)
#load(path, []T)
(whereT
is a type that can be trivially loaded from memory (i.e. no pointers))#load(path, string)
(shorthand forstring(#load(path))
)
- Deprecate
#load_or(path, default)
in favour of#load(path) or_else default
- Allow chaining of
#load(path1) or_else #load(path2)
- Pass size information to allocator to
delete
, when possible, to improve tracking information - Improved detection of rc.exe
- Improvements to debug symbols for range intervals
- Fix Objective-C related
x->y()
calls in Odin - Prepare for future LLVM versions
- Various bugfixes
New Packages
vendor:commonmark
- Markdown Variant: https://commonmark.org/
Package Improvements
core:image/tga
can now load as well- Add
math.divmod
andmath.floor_divmod
- Pretty marshal output for
core:encoding/json
- Add ID3D11Debug to
vendor:directx/d3d11
package - Add wgl, raw input, and additional Windows imports
- Add more
core:container/queue
helpers andpeek_front
andpeek_back
- Add
reflect.get_union_variant
- Add
slice.sort_with_indices
family of procedures - Improvements to
sync.Futex
support on windows - Add
core:sys/valgrind
package for valgrind, memcheck, and callgrind - Various bugfixes
dev-2022-08
New Language Features
None
New Compiler Features
#by_ptr
procedure attribute to enforce a parameter to be passed by pointer internally
Compiler Improvements
- Improved build scripts for *nix systems
- Improved error message when doing
^x
instead of&x
for addressable variables - Improved debug symbol generation
- Fix and improve
x->y()
behaviour to minimize duplicate evaluation - Disallow
proc do stmt
and only allowproc() { stmt }
- This removed an ambiguity with parsing
- Fix minor issue with a lack of a trailing comma in parsing
struct
s without-vet
- Numerous bug fixes
New Packages
None
Package Improvements
- Improvements to
strings.Buffer
related procedures - Update
vendor:raylib
to support macos-arm64 - Minor improvements to mathematical procedures
- Minor clean up of the WASI API
- Simplify logic of
append
of zero sized elements
dev-2022-07
New Language Features
- Add builtin
shrink
for dynamic maps and arrays
New Compiler Features
Compiler Improvements
- Fix
odin test
runner. - Use
memmove
if possible when emitting store over a certain size
New Packages
core:slice/heap
- A max heap implementation
Package Improvements
- Tighter allocation of Arena allocator
- Remove
simd_rem
; Disallowsimd_dev
for integers - Remove
strings
dependency fromcore:sys/windows
- Additional Win32 bindings
- Add new verbs and qualifiers to
core:fmt
- Support utf-16 printing with
[]u16
and[^]u16
- Add
strings.prefix_length
andslice.prefix_length
- Add
runtime.dll_forward_reason
for Windows
dev-2022-06
New Language Features
-
Generic
#simd
type and intrinsics- Supports array programming semantics (operators)
- New generic intrinsics
- Platform specific intrinsics for the x86 family:
sse
,sse2
,sse41
,sse42
,ssse3
cmpxchg16b
,fxsr
,lzcnt
,pclmulqdq
,popcnt
,sha
- PR #1807
-
Merge functionality of
#maybe
with standardunion
functionalityMaybe :: union($T: typeid) {T}
No need for#maybe
any more
-
Deprecation of
a..b
range syntax to prefera..=b
New Compiler Features
-
New intrinsics:
non_temporal_load
non_temporal_store
fused_mul_add
-
Generic
#simd
intrinsics:simd_add
simd_sub
simd_mul
simd_div
simd_shl
simd_shr
simd_shl_masked
simd_shr_masked
simd_add_sat
simd_sub_sat
simd_and
simd_or
simd_xor
simd_and_not
simd_neg
simd_abs
simd_min
simd_max
simd_clamp
simd_lanes_eq
simd_lanes_ne
simd_lanes_lt
simd_lanes_le
simd_lanes_gt
simd_lanes_ge
simd_extract
simd_replace
simd_reduce_add_ordered
simd_reduce_mul_ordered
simd_reduce_min
simd_reduce_max
simd_reduce_and
simd_reduce_or
simd_reduce_xor
simd_shuffle
simd_select
simd_ceil
simd_floor
simd_trunc
simd_nearest
simd_to_bits
simd_lanes_reverse
simd_lanes_rotate_left
simd_lanes_rotate_right
-
Platform specific intrinsics:
x86_cpuid
x86_xgetbv
-
@(priority_index=<int>)
forforeign import
- Force certain things to be linked before others
- Required for the deterministic link order of foreign imports
Compiler Improvements
- Allow
transmute
on constant expressions - Heavily improved support for
js_wasm32
target- Basic DOM UI procedures
- Event system including listeners
- Page Allocator
- Compiler flag error message improvements
- Improved ternary-if type inference
- Improved -vet shadowing with ternary-if expressions
- Allow
import _ "foo"
to allow for@(init)
procedures without producing an import name - Correct
@(require_results)
on parapoly procedures
New Packages
core:simd
core:simd/x86
core:encoding/endian
vendor:ggpo
vendor:openexr
Package Improvements
- Unify
raw_data
incore:mem
withcore:runtime
- Make
raw_data
return[^]T
types
- Make
core:image
generic interface improvementsimage.which
- Generic loader
- Add
#optional_ok
todynlib.symbol_address
- Add
mem.DEFAULT_PAGE_SIZE
- Add
rand.init_as_system
to allow for system-level based random number generation - Numerous minor fixes to
core:
packages - Interface cleans up to numerous packages keeping platform specific code private