Odin Versions Save

Odin Programming Language

dev-2024-04a

3 weeks ago

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: https://github.com/odin-lang/Odin/compare/dev-2024-04...dev-2024-04a

dev-2024-04

3 weeks ago

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 https://github.com/odin-lang/Odin/pull/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 to core: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: https://github.com/odin-lang/Odin/compare/dev-2024-03...dev-2024-04

dev-2024-03

2 months ago

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 to core: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's ModelAnimation alignment to match that of C's
  • Better error code for binding a privileged port without root access in core:net
  • vendor:glfw add RawMouseMotionSupported
  • Basic EGL support on Linux
  • Improved implementation of core:math round

Full Changelog: https://github.com/odin-lang/Odin/compare/dev-2024-02...dev-2024-03

dev-2024-02

3 months ago

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
  • 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 with x y z w or real imag jmag kmag rather than be positional
  • struct #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.
  • Removal of incl and excl built-in procedures. Prefer:
    • s += {.A,} for incl(&s, .A)
    • s -= {.A,} for excl(&s, .A)

Compiler Improvements

  • @(entry_point_only) attribute to mark a procedure which can only be called within main (the entry point procedure)
  • Move builtin matrix procedures to intrinsics
    • They can be either accessed from base:intrinsics or core:math/linalg etc packages
  • 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)

dev-2024-01

4 months ago

New Language Features

Compiler Improvements

  • -obfuscate-source-code-locations flag to hash location strings
  • MacOS:
    • -no-crt now works
    • Fix the duplicate -lSystem linker warning
    • Default to SDK version for -minimum-os-version to avoid linker warnings
  • #load now 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_elems bug
  • core:sys/linux: syscall additions
  • core:sys/windows: HIDPI, Error codes enum
  • vendor:raylib: update to version 5
  • core:slice: reduce_reverse, filter_reverse, repeat, unique, unique_proc
  • core:log: Allocator print formatted (kb, mb etc.) bytes
  • core:fmt: Make %g the default for floats
  • core:encoding/json: basic union unmarshalling

dev-2023-12

5 months ago

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 to 8 from 64
  • Numerous Bug Fixes
  • Add new intrinsics for union_tag_* related stuff
  • Fix &x[i] of ^#soa types

New Packages

  • vendor:x11/xlib

Package Improvements

  • core:crypto

dev-2023-11

6 months ago

New Language Features

Compiler Improvements

  • LLVM 17 support for all platforms
  • Numerous code generation improvements with LLVM 17
  • -no-crt improvements to all platforms

New Packages

Package Improvements

  • Numerous improvements to core:sys/linux

dev-2023-10

7 months ago

New Language Features

  • or_break
  • or_continue
  • #relative [^]T (relative multi-pointers)
    • Replaced #relative []T (relative slices)
    • This data type might be removed in the future

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 in and switch in in favour of for _ in and switch _ in
  • Disallow aliasing of any and typeid
  • ODIN_PLATFORM_SUBTARGET global constant
  • General Fixes

New Packages

Package Improvements

  • General Fixes

dev-2023-08

9 months ago

New Language Features

Compiler Improvements

  • Separate vetting command line flags
    • -vet-unused
    • -vet-shadowing
    • -vet-using-stmt
    • -vet-using-param
    • -vet-style
    • -vet-semicolon
    • -vet is equivalent to -vet-unused -vet-shadowing -vet-using-stmt
  • //+vet file tags
    • //+vet enables -vet for that file
    • //+vet using-stmt to enable -vet-using-stmt for that file
    • //+vet !using-stmt disables -vet-using-stmt if it is enabled in some way (e.g. -vet)
    • //+vet semicolon !using-stmt enables -vet-semicolon but disables -using-stmt
  • Minor improvements to type inference for procedure groups
  • Numerous bug fixes

New Packages

Package Improvements

  • General Fixes
  • General Documentation Improvements

dev-2023-07

9 months ago

New Language Features

  • Allowing for Positional and Named Arguments in Procedure Calls details
  • #reverse for
  • Allow for &e, i in array and for k, &v in map and switch &v in ...
    • Will replace the old style of passing the iterable by pointer
    • The &e value will still be of the same type but will be addressable (a reference to the actual value)
      • Variable Addressing Mode (L-Value in C-speak)

Compiler Improvements

  • intrinsics.type_merge
  • ODIN_COMPILE_TIMESTAMP (unix timestamp in nanoseconds)
  • Default to panic allocator for wasm targets
  • Numerous Fixes

New Packages

  • New and Improved io.Stream interface - details
  • core:math/cmplx
  • Font texture atlas builder port of fontstash was added to vendor:fontstash
  • Vectorized rendering port of nanovg was added to vendor:nanovg

Package Improvements

  • Add math.sincos
  • Update to Botan 3.0
  • Use C calling convention within most Objective-C related procedures in vendor:darwin packages
  • Add loads of @(require_results) to many procedures within core
  • Make the vast majority of math procedures "contextless"
  • Add Mutex to mem.Tracking_Allocator
  • bindFramebuffer was added to WebGL package
  • Added self_cleanup flag to properly auto-clean threads
  • Correct printing in core:fmt for ODIN_ERROR_POS_STYLE
  • General Fixes