Releases: odin-lang/Odin
Releases Β· odin-lang/Odin
dev-2024-05
New Language Features
Compiler Improvements
odin rootcommand- Normalize
ODIN_ROOTpath - 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-allocatoron wasm targets - Allow
@(init)procs to be@(disabled) - Performance improvements for access and storing fields from a
bit_fieldtype - Minimally support compiling Odin on FreeBSD arm64
- Improved target feature support
- Improved
-microarchsupport with list of possible micro-architectures.=
New Packages
core:sys/darwin/CoreFoundationcore:sys/darwin/Securitycore:encoding/cbor
Package Improvements
- General bug fixes
- General documentation improvement (typos and
doc.odinfixes) - core:net Add support for URL fragments
- Fix
big.internal_random_primewithSecond_MSB_On - Fix
vendor:d3d12calling convention mistakes - Fix to Fisher-Yates shuffle in
core:rand - Fix
core:text/i18ndefaultnumbervalue inget_*_section - Fix
#soa%#vformatting - Fix
%eformatting - Fix
%[N].*[M]vstyle formatting - Improvements to
Negative_Read/Negative_Writelogic forcore:io - Fix
omitemptyinjson.marshal - Improved statistics for
core:mem/Tracking_Allocator - Require results for non-buffered
printprocs 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/jsoninvalid 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/parsercrashing 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
-vethappy - Fix
bit_fieldaccess 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_fieldtype
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-errorsare 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
-lldon 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_fullpathon Linux/macOS - Numerous compiler fixes and error messages
New Packages
- Moved
vendor:darwin/Foundationtocore: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 _: Tfields
- 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:x11fixes- Allow for the new futex API on darwin platforms if it is available
- Fix
os.read_entire_filefor 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-crton Darwin and Linux - Make
odin runargs 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_tableto 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_varargsaccording 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.*printflnadd tocore:fmt- Fixes to the WebGL package
- General improvements to package os for *nix platforms
- Numerous documentation improvements
- Fixes to
core:mem/virtualarena_static_reset_to - Make spall able to be used in instrumentation procedures
- Expose
vendor:OpenGLshader procedures in - Add more Windows window procedures
- Fix
returnin json unmarshal for enumerated arrays - Add
ID3DUserDefinedAnnotationto direct3d package - Update miniaudio to 0.11.21
- Change
vendor:raylibto use non-universal binaries - Fix
vendor:raylib'sModelAnimationalignment to match that of C's - Better error code for binding a privileged port without root access in
core:net vendor:glfwaddRawMouseMotionSupported- Basic EGL support on Linux
- Improved implementation of
core:mathround
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.quaternioncall must name the elements withx y z worreal imag jmag kmagrather 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
inclandexclbuilt-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
builtinmatrix procedures tointrinsics- They can be either accessed from
base:intrinsicsorcore:math/linalgetc packages
- They can be either accessed from
- Fix calling conventions for the
core:simd/x86calling conventions - Expand
-subsystemoption 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/virtualvirtual.map_file
core:dynlibdynlib.initialize_symbolsdynlib.last_error
core:c/libclibc.to_stream
core:math/fixedimprovements- Fix
vendor:raylibIsGestureDetectedbinding - Fixes for
wasmtargets - Remove any cyclic dependencies that
base:runtimepreviously depended on (e.g.core:os)
dev-2024-01
New Language Features
Compiler Improvements
-obfuscate-source-code-locationsflag to hash location strings- MacOS:
-no-crtnow works- Fix the duplicate
-lSystemlinker warning - Default to SDK version for -minimum-os-version to avoid linker warnings
#loadnow works with absolute paths- Fix a bug that caused running tests twice
- General compiler crash fixes
New Packages
Package Improvements
- Fixes:
- Default
temp_allocator/arena edge cases - Dynamic array
assign_at_elemsbug
- Default
core:sys/linux: syscall additionscore:sys/windows: HIDPI, Error codes enumvendor:raylib: update to version 5core:slice:reduce_reverse,filter_reverse,repeat,unique,unique_proccore:log:Allocatorprint formatted (kb, mb etc.) bytescore:fmt: Make%gthe default for floatscore:encoding/json: basic union unmarshalling
dev-2023-12
New Language Features
Compiler Improvements
-microarch:<string>- Default to static map look ups on Windows (still default to dynamic on other systems)
- Lower
map's minimum capacity to8from64 - Numerous Bug Fixes
- Add new intrinsics for
union_tag_*related stuff - Fix
&x[i]of^#soatypes
New Packages
vendor:x11/xlib
Package Improvements
core:crypto
dev-2023-11
New Language Features
Compiler Improvements
- LLVM 17 support for all platforms
- Numerous code generation improvements with LLVM 17
-no-crtimprovements to all platforms
New Packages
Package Improvements
- Numerous improvements to
core:sys/linux
dev-2023-10
New Language Features
or_breakor_continue#relative [^]T(relative multi-pointers)- Replaced
#relative []T(relative slices) - This data type might be removed in the future
- Replaced
Compiler Improvements
- LLVM 17.0.1 for Windows
- Linux and Darwin support coming very soon
-sanitize:<string>(can be applied together)-sanitize:address(Windows, Linux, Darwin)-sanitize:memory(Linux)-sanitize:thread(Linux, Darwin)
raw_data(^matrix[R, C]T) -> [^]T- Remove
for inandswitch inin favour offor _ inandswitch _ in - Disallow aliasing of
anyandtypeid ODIN_PLATFORM_SUBTARGETglobal constant- General Fixes
New Packages
Package Improvements
- General Fixes
dev-2023-08
New Language Features
Compiler Improvements
- Separate vetting command line flags
-vet-unused-vet-shadowing-vet-using-stmt-vet-using-param-vet-style-vet-semicolon-vetis equivalent to-vet-unused -vet-shadowing -vet-using-stmt
//+vetfile tags//+vetenables-vetfor that file//+vet using-stmtto enable-vet-using-stmtfor that file//+vet !using-stmtdisables-vet-using-stmtif it is enabled in some way (e.g.-vet)//+vet semicolon !using-stmtenables-vet-semicolonbut disables-using-stmt
- Minor improvements to type inference for procedure groups
- Numerous bug fixes
New Packages
Package Improvements
- General Fixes
- General Documentation Improvements