Releases: odin-lang/Odin
Releases Β· odin-lang/Odin
dev-2024-10
New Language Features
- Replace
//+
syntax with#+
- Used in cases like
#+build windows
- Used in cases like
#min_field_align
and#max_field_align
- deprecate
#field_align
in favour of#min_field_align
#max_field_align
used in places where#pragma pack
was used in some C compilers
- deprecate
#caller_expression
Compiler Improvements
- ABI BREAKING CHANGE: How SysV handles multiple return values
- Matches the same behaviour as other platforms to pass multiple return values separately
- Fix ABI for 128-bit integers since the breaking changes in LLVM 18 for WASM and AMD64
-vet-packages:<command-separated-string_array>
-vet-unused-procedures
- Add
-no-rpath
- Simplify
#row_major
andmatrix_flatten
behaviour - Allow
transmute(Bit_Set)~T(0)
- Move many of the
vendor:wasm/js
package tocore:sys/wasm/js
- Rename
runtime.js
toodin.js
to be consistent
- Rename
New Packages
Package Improvements
- General improvement to documentation across the
core
library core:sys/info
: more CPU feature detection for RISC-Vcore:time
time.time_to_datetime
- Add
#any_int
directive to built-in procedures that were missing it, to be consistent - More Objective-C Runtime Bindings
- Improvements to
core:container/bit_array
- Improvements to C vararg behaviour and definitions and
va_list
- Improvements to atomic/sync/thread related operations
- Improvements to
core:sync/chan
dev-2024-09
New Language Features
- Add support for linux_riscv64 and freestanding_riscv64
Compiler Improvements
- Support RISC-V for the compiler itself
- Fix crash if referencing import "aliased" in other file
- Added a hint at end of
build.bat
about release mode when building in debug mode - Allow symlink test to work irrespective of git settings
- Use another BSD URL for pkgsrc on CI
- Fix type switching over internal pointer union
- Fix c_vararg bit_set
- Add table-driven (in)definite article to some errors.
- Fix alias handling of procedures
- riscv: add an error when atomics are used without the atomics extension
- Remove extra format item at end of
context
error message - Fix inline transmutation of
[16]i8
toi128
- Fix 'odin [run|test] --' giving a compiler out of bounds
- UL_COMPARE_AND_WAIT_SHARED is macOS 10.15+
- query brew for llvm-config location if possible
New Packages
- Add
vendor:box2d
- Add
core:text/regex
Package Improvements
- Add
sdl2glue
tovendor:wgpu
package - Fix os.read_dir with symlinks
os.Error
to replaceos.Errno
core:image/common.odin
Fixes- Prevent
SIGPIPE
on Darwin when writing to a closedcore:net
socket - Add
reflect.struct_field_count
that returns the number of fields in a struct type - Fix missing closing brace for Bit_Field in
core:odin/parser
- Fix SIMD intrinsics wording
- Core sys windows rawinput code
- Port
core:net
to FreeBSD - Allow testing for intentional leaks in test runner
- Various
core:encoding/cbor
fixes - Various
core:crypto
improvements - Vectorize
index_byte
- Use
intrinsics.reverse_bits
incore:compress/zlib
- Fix
type_info_union_is_pure_maybe
only working with regular pointers - Add support for field tags on bit_field fields to
core:odin
- Loop
os.write_entire_file
to write more than MAX_RW - [fmt] Add bit fields to the pointer printing logic
- Fix
os.read_dir
closing the given file descriptor - Fix type hint propagation for shift
- Let memory failures be errors in the test runner
- Check if procedure parameter type declares polymorphic args
vendor:x11
: Added a few procedures for xrandr, xinput, and xFixesvendor:egl
: Added a few more egl procedures and constantscore:time
WASI implementationcore:sys/linux
: Add binding to ioctl syscall + standard fd constants.- Update mem doc example formatting
- Error if assigning to
rodata
variable with index - Report error when a variadic procedure parameter has a default value
core:sys/posix
andcore:os/os2
based on it (for darwin, netbsd, freebsd and openbsd)- Fix error handling in os2.read_entire_file_from_file()
- add shm_open and shm_unlink syscalls for darwin
- More Foundation bindings.
- Add autogenerated orca bindings and macros from laytan
- os2 process linux implementation
- Improve benchmarks.
- Check if file open-mode is
O_CREATE
on Darwin before forcing chmod - Fix
open
bindings - Fix log unnecessary allocations
- (raygui) Restores vertical text alignment broken after 4.0 migration
- Implement
lshrti3
on wasm - Add
core:math.count_digits_of_base
- Remove deprecated
log
procs fromcore:testing
- Fix SIMD var typo
- Fix wiki link in the
README.md
- Add support for Linux on os/sys/posix termios.
- A couple of foundation binding. Vet tabs.
- core:sys/linux - implement clock_settime, clock_getres and clock_nanosleep
- os2: process API for Darwin and most of it for BSDs
- orca: implement
core:time
andcore:log
- Fix ambiguous generic type names
- Added missing slice advancing.
- Fix binding: Make
rl.LoadImageAnim
take a pointer instead of a multi-pointer. - Fix
core:reflect/iterator.odin
- Fix binding to cmark_node_get_fence_info
- Fix win32 dwmapi DWMWINDOWATTRIBUTE enum.
- os2: propagate errors from execv
- Free the arenas allocated in
test_core_runtime
- Fix use-after-free in
thread.Pool
- Fix error for uuid to require 36 bytes instead 32 (4 bytes for dashes)
- Fix
-vet
and-strict-style
failures in tests - [os2/process]: Don't free process info fields in partial success scenarios
- Add API for freeing
thread_local
state - wgpu: update to v22.1.0.1
- Delay lexical checking for foreign blocks that are in file scope
- -vet -strict-style -disallow-do in tests
- Win32 clipboard procedures
- os2: disable custom heap allocator
- mem/virtual: use
sysconf
for retrieving page size and actually use these init procs - mem/virtual: make sure the given size is used for subsequent blocks
- Add missing lexer checking delay for foreign blocks
- Add
core:io
test suite - Add a file tag parser to core:odin/parser
- Fix some issues with the "bad import name" errors
- Add math.remap_clamped, which clamps the result in range [new_min, new_max]
dev-2024-08
New Language Features
Compiler Improvements
- Update to LLVM 18.1.8
- Force compiler source to be parsed as UTF-8 (Windows)
- Improve various compiler-internal asserts
- Fix
#soa
assignment bug - Add error for
type_of(value of untyped type)
- Remove
*_test.odin
; always compile it for all targets - Add
-print-linker-flags
- Allow
x :: y when cond else proc(...){...}
- Allow using a precompiled Windows resource file with
-resource:foo.res
- Fix problem where the initial package's directory name ended in .odin
- Fix check for whether executable output path is a directory
New Packages
Package Improvements
- Add bindings for WOW64 API
- Improve
os.open
for WASI - Support
vendor:stb/truetype
andvendor:fontstash
on WASM - Fix linker errors with empty project for
vendor:wgpu
- Fix SDL constants
- Fix alignment bug in
mem.dynamic_pool
and add tests for it - Fix
reflect.as_pointer
- Remove implicit allocator usage in
core:dynlib
- Fix
utf8_to_wstring
given zero bytes. - Add
setenv
andunsetenv
for Darwin - Improve
core:encoding/cbor
- Remove syscall usage on Darwin to comply with Apple guidelines
- Add some XKB extension procedures and constants to
vendor:x11
- Fix
@(optimization_mode)
usage in builtin collections - Add synonyms
strings.starts_with
andstrings.ends_with
as aliases - Allow overriding random generator in
rand
calls - Add documentation and example for
core:container/intrusive/list
- Update stb_truetype.odin
- Add support of
ignore
tag forjson.marshal
- Allow json maps with int keys in
marshal
andunmarshal
- Add Intel AES-NI support to
core:crypto/aes
- Improve
rand.shuffle
- Fix leak in
core:encoding/ini
and add tests for it - Document
core:time
,core:time/datetime
,core:thread
andcore:sync
- Add example and tests for
vendor:lua
- Many
core:sys/windows
improvements - Add json reporting to
core:testing
- Add
time.to_string*
formatters. - Clamp
dot
inlinalg.angle_between
to avoid precision errors. - Update RayGui procedures
dev-2024-07
New Language Features
- Allow for constant strings in
foreign import
s #exists(<string>) -> bool
@(rodata)
context.random_generator
- Brand new
runtime.Random_Generator
interface
- Brand new
Compiler Improvements
- Brand new Multithreaded Test Runner
- Improvements to error line rendering
- Full support for Unicode grapheme clusters
- NetBSD ARM64 support
-show-defineables
and-export-defineables
-vet-cast
- Looks for redundant
cast
s ortransmute
s, andtransmute
s that should becast
s
- Looks for redundant
-strict-style
now enforces a lot more regarding the official Odin code base style-vet-style
is a much weaker form that does not have all of the same enforced options as-strict-style
- Enforces
-vet-cast
- Enforces
case
statements to be in the same column as theirswitch
token - Enforces 1TBS style
-vet-tabs
- Enforces tabs to be used for indentation with statements/declarations
-custom-attribute:<string>
-custom-attribute:attr1
-custom-attribute:attr1,attr2
-custom-attribute:attr1 -custom-attribute:attr2
- Improve parsing for
label: #reverse for
andlabel: #partial switch
- Allow
#soa
arrays to be used directly withmake
,reserve
,append
, etc. intrinsics.procedure_of(call(...))
intrinsics.syscall_bsd
- Fixes to debug information generation for LLVM < 13
- Add
#directory
(complements#file
) - Remove
@(warning)
and#warning
- Allow
- constant_array
- Support
@(extra_linker_flags)
on WASM targets - Use
f32
operations when doingcomplex32
andquaternion64
operations to improve accuracy and performance - Allow for
when x in y {
(minor oversight in syntax) - Keep
bit_field
accesses happy with-santitize:address
- Fix for
bit_set[$T]
not setting the bounds correctly (#3842) intrinsics.type_struct_has_implicit_padding
- Remove quite a few possible race conditions in the compiler
- Numerous big fixes
New Packages
vendor:wgpu
(WebGPU)core:flags
core:encoding/uuid
core:mem/tlsf
- "Two-Level Segregated Fit" memory allocator
core:image/bmp
Package Improvements
core:text/table
now supports Unicode grapheme clusters correctlycore:math/rand
now uses the newcontext.random_generator
interface instead of the implementation specificrand.Rand
core:crypto
has a Random_Generator interface for entropic cryptographic random number generators- Improvements to
core:strconv
- Support complex/quaternion parsing
- Partial parsing of infinity
- Improvements to
vendor:raylib
declarations - Move
rlgl
tovendor:raylib/rlgl
- Fixes to
core:math/big
and add numerous other utility procedures - Fix code generation for
vendor:vulkan
on^[3]f32
parameters - Numerous improvements to
core:odin/parser
- Make
runtime.heap_alloc
et al"contextless"
- Add
#no_broadcast
toappend_soa
calls - Add
no_zero_*
variants for#soa
dynamic arrays - More test suites
dev-2024-06
New Language Features
intrinsics.type_is_matrix_row_major
+intrinsics.type_is_matrix_column_major
#hash(<string>[, algo])
@(link_suffix=<string>)
Compiler Improvements
- New NetBSD target support
- Experimental
orca_wasm32
target support - Documentation tests fixed and re-enabled
- Fix
>=
for strings, add test for string comparisons - Suggest
-all-packages
if testing an empty directory core:intrinsics
->base:intrinsics
..
range is now an error. Use..<
or..=
- Reimplement
-build-mode:static
/-build-mode:lib
- Strictly enforce
switch &x in y
semantics and fixfor &v in &fixed_array
- Fix
intrinsics.ptr_sub
- Fix indexing type when using a
#row_major
matrix - Remove constant indexing for
matrix
value propagation - Improve error messages and their suggestions
- Delay checking
foreign import
paths until the global scope is checked
New Packages
core:container/rbtree
core:encoding/ini
core:crypto/aes
Package Improvements
- Fix some edge cases and oversights for
bit_field
- Fix
read_directory
skipping directories on Unix-likes - Add default heap/general purpose allocator for WASM
- Fix and improve
i18n
.mo plurals - Correctly load/store uint & int for wasm64p32
- Fix bug in
QOI
encoder + decoder - Fix the way
%32b
and other prefixed numbers are written` - Improve
fmt
parsing of struct field tags vendor:microui
gained textbox selection, cut, copy and paste- Add a custom iterator to
CSV
package. - Allow space as allowed separator to RFC 3339 parser
- Add abbreviated ISO 8601 parser
- Lots and lots of bugfixes
Packages deprecated
core:odin/printer
andcore:odin/format
have been removed in favor of using OLS
Full Changelog: dev-2024-05...dev-2024-06
dev-2024-05
New Language Features
Compiler Improvements
odin root
command- Normalize
ODIN_ROOT
path - Improvements to arm64 ABI for returning 0 sized types
- Allow compiling with LLVM 18 (non-Windows targets)
- Fix linking with clang-18
- Fix wrote llvm-config in build script for FreeBSD
- Change layout of compiler (not language) hash maps for minor performance improvements
- Numerous improvements to catch the possible race conditions with the new error reporting system
- Allow
-default-to-nil-allocator
on wasm targets - Allow
@(init)
procs to be@(disabled)
- Performance improvements for access and storing fields from a
bit_field
type - Minimally support compiling Odin on FreeBSD arm64
- Improved target feature support
- Improved
-microarch
support with list of possible micro-architectures.=
New Packages
core:sys/darwin/CoreFoundation
core:sys/darwin/Security
core:encoding/cbor
Package Improvements
- General bug fixes
- General documentation improvement (typos and
doc.odin
fixes) - core:net Add support for URL fragments
- Fix
big.internal_random_prime
withSecond_MSB_On
- Fix
vendor:d3d12
calling convention mistakes - Fix to Fisher-Yates shuffle in
core:rand
- Fix
core:text/i18n
defaultnumber
value inget_*_section
- Fix
#soa
%#v
formatting - Fix
%e
formatting - Fix
%[N].*[M]v
style formatting - Improvements to
Negative_Read/Negative_Write
logic forcore:io
- Fix
omitempty
injson.marshal
- Improved statistics for
core:mem/Tracking_Allocator
- Require results for non-buffered
print
procs core:sys/info
: add arm feature detection, fix Linux implementation, show more CPU info on Darwin- Fix vendor dynamic libraries not working on Linux
- Fixes to
core:encoding/json
invalid JSON when an error does not have a position - Add
slice.enum_slice_to_bitset
&slice.bitset_to_enum_slice
- Add DXGI 1.5 & 1.6 APIs
- Update d3d12 API
- Refactor
fmt.wprintf
- Fix
core:odin/parser
crashing on empty and/or no package files
Full Changelog: dev-2024-04a...dev-2024-05
dev-2024-04a
Minor Update from dev-2024-04
For the full release notes of dev-2024-04, see its release
New Language Features
Compiler Improvements
- nasm check fixes
- Keep
-vet
happy - Fix
bit_field
access on implicit dereference - Fix typos in error messages
- Improve and fix numerous warnings
New Packages
Package Improvements
Full Changelog: dev-2024-04...dev-2024-04a
dev-2024-04
New Language Features
bit_field
type
Foo :: bit_field u16 { // backing type must be an integer or array of integers
x: i32 | 3, // signed integers will be signed extended on use
y: u16 | 2 + 3, // general expressions
z: My_Enum | foo.SOME_CONSTANT, // ability to define the bit-width elsewhere
w: bool | foo.SOME_CONSTANT > 10 ? 2 : 1,
}
Handle :: bit_field u32 {
slot: u32 | 16,
generation: u32 | 15,
in_use: bool | 1,
}
-
name: type | bit_width
-
name: type | bit_width "field_tag"
(similar to a struct field with a tag) -
Iteration over
bit_set
s: bit_set[Enum; u32]
for x in s {
...
}
// equivalent to
for x in Enum do if x in s {
...
}
Compiler Improvements
- Improved Error Reporting System
- Sorted printing based on error position
- Ability to export error list to json
-json-errors
-terse-errors
are only a single line now
- Error message suggestions for people making common C mistakes
- Aiding newcomers from C/C++ to Odin
- Loads of debug info refactors and improvements
- Add Haiku OS support by @avanspector & @xslendix in #3230
- Respect "smart linker" approaches
- Respect
-lld
on non-Windows machines - Remove entry point when compiled with no-entry-point as shared library
- Numerous fixes to wasm targets
- Numerous fixes to ARM64 ABI on Darwin
- Numerous fixes to SysV AMD64 ABI on Darwin and Linux
- Speed up
path_to_fullpath
on Linux/macOS - Numerous compiler fixes and error messages
New Packages
- Moved
vendor:darwin/Foundation
tocore:sys/darwin/Foundation
Package Improvements
- Improvements to
core:crypto
- Make raylib and stb_rect_pack be free of libc
- Numerous improvements to
core:encoding/json
- Support writing enum value names
- Support for
using _: T
fields
- Fixes to
core:math/big
- Fixes to
core:math/linalg
- Fixes to
core:slice
- Fixes to
core:odin/parser
- General fixes to
base:runtime
vendor:x11
fixes- Allow for the new futex API on darwin platforms if it is available
- Fix
os.read_entire_file
for pipes and console
CI Improvements
- Update LLVM to 17 for the CI/Releases
Full Changelog: dev-2024-03...dev-2024-04
dev-2024-03
Distribution Changes
- MacOS ARM releases and CI support
- MacOS releases self-contained / bundle LLVM
New Language Features
Compiler Improvements
- General bug fixes in the compiler
- Fix
-no-crt
on Darwin and Linux - Make
odin run
args take the first '--' as the start of the args, instead of the last '--' - Fix intstrumentation in debug mode
- Add backend info to
odin report
- Change
runtime.type_table
to allow RTTI to be constantly initialized on all platforms- Removes the need for the start procedure initializing the RTTI table
- Previous approach was due to limitations and bugs in LLVM
- Promote types in
#c_varargs
according to C rules - Reduce dynamic library dependencies on macOS
- We were previously linking with LLVM-C, LLVM, and libunwind, however only LLVM was needed since it contains LLVM-C, and libunwind comes with macOS already
New Packages
core:crypto/hash
- General refactor of the cryptographic packages
core:container/avl
- AVL Tree Container
Package Improvements
fmt.*printfln
add tocore:fmt
- Fixes to the WebGL package
- General improvements to package os for *nix platforms
- Numerous documentation improvements
- Fixes to
core:mem/virtual
arena_static_reset_to
- Make spall able to be used in instrumentation procedures
- Expose
vendor:OpenGL
shader procedures in - Add more Windows window procedures
- Fix
return
in json unmarshal for enumerated arrays - Add
ID3DUserDefinedAnnotation
to direct3d package - Update miniaudio to 0.11.21
- Change
vendor:raylib
to use non-universal binaries - Fix
vendor:raylib
'sModelAnimation
alignment to match that of C's - Better error code for binding a privileged port without root access in
core:net
vendor:glfw
addRawMouseMotionSupported
- Basic EGL support on Linux
- Improved implementation of
core:math
round
Full Changelog: dev-2024-02...dev-2024-03
dev-2024-02
As part of the Journey to Odin 1.0, we are cleaning up the packages that Odin provides and making explicit delineations for what is needed. A new library collection has been added: base
.
This means that there are now 3 official library collections as part of the official compiler:
base
- packages which are required by the language itself, defined by the language specification, and all compilers must implement (implementations may different, but interface must be the same)- All platforms (including
freestanding
) will be supported in this library collection
- All platforms (including
core
- packages which are core to most programming development and supported by most platforms.- Most platforms will be supported in this library collection
vendor
- third-party packages with first-party support which are useful for numerous projects (graphics APIs, audio, window management, specialized networking, etc).- Many platforms will be supported in this library collection
Packages which have been moved to the new base
library collection:
core:builtin
->base:builtin
(previous is still valid as an alias)core:intrinsics
->base:intrinsics
(previous is still valid as an alias)core:runtime
->base:runtime
(previous is still valid as an alias)
New Language Features
builtin.quaternion
call must name the elements withx y z w
orreal imag jmag kmag
rather than be positionalstruct #field_align(N)
- It sets the minimum alignment for the fields within a struct. This cannot be used with
#packed
, but can be used with#align(N)
. - If
#align(N)
is less than#field_align(N)
, then a warning will be printed.
- It sets the minimum alignment for the fields within a struct. This cannot be used with
- Removal of
incl
andexcl
built-in procedures. Prefer:s += {.A,}
forincl(&s, .A)
s -= {.A,}
forexcl(&s, .A)
Compiler Improvements
@(entry_point_only)
attribute to mark a procedure which can only be called withinmain
(the entry point procedure)- Move
builtin
matrix procedures tointrinsics
- They can be either accessed from
base:intrinsics
orcore:math/linalg
etc packages
- They can be either accessed from
- Fix calling conventions for the
core:simd/x86
calling conventions - Expand
-subsystem
option on Windows -default-to-panic-allocator
- Numerous typo fixes
New Packages
Package Improvements
- Use
"system"
calling convention everywhere"stdcall"
was previous used- This allows cross platform use of packages which were originally Windows only but not any more
core:mem/virtual
virtual.map_file
core:dynlib
dynlib.initialize_symbols
dynlib.last_error
core:c/libc
libc.to_stream
core:math/fixed
improvements- Fix
vendor:raylib
IsGestureDetected
binding - Fixes for
wasm
targets - Remove any cyclic dependencies that
base:runtime
previously depended on (e.g.core:os
)