Odin Versions Save

Odin Programming Language

dev-2022-08

1 year ago

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 allow proc() { stmt }
    • This removed an ambiguity with parsing
  • Fix minor issue with a lack of a trailing comma in parsing structs 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

1 year ago

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; Disallow simd_dev for integers
  • Remove strings dependency from core: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 and slice.prefix_length
  • Add runtime.dll_forward_reason for Windows

dev-2022-06

2 years ago

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 standard union functionality

    • Maybe :: union($T: typeid) {T} No need for #maybe any more
  • Deprecation of a..b range syntax to prefer a..=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>) for foreign 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 in core:mem with core:runtime
    • Make raw_data return [^]T types
  • core:image generic interface improvements
    • image.which
    • Generic loader
  • Add #optional_ok to dynlib.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

dev-2022-05

2 years ago

New Language Features

None

New Compiler Features

  • New intrinsics:
    • intrinsics.type_is_multi_pointer
    • intrinsics.type_field_type

Compiler Improvements

  • Numerous bug fixes
  • Refactored filename handling
  • Error message if the output is a directory
  • Packages are assumed to be directory-based unless -file is supplied

New Packages

  • New builtin container_of
  • core:compress/shoco A short string (de)compressor
  • core:container/intrusive/list An intrusive linked list
  • core:encoding/varint LEB128 encode and decode
  • core:encoding/xml An XML parser
  • core:image/netpbm A reader/writer for the NetPBM image formats
  • core:image/qoi A reader/writer for the QOI image format
  • core:image/tga A writer for a common subset of the TGA format
  • core:text/i18n An easy way to translate your software using GetText or Qt Linguist translations

Package Improvements

  • Additional D3D and win32 bindings and constants
  • Unified Sema and Atomic_Sema behaviour
  • Fix quaternion implementation #1644
  • Updated Vulkan generator and package
  • Fixed static arena assertion fail #1740
  • core:container/lru Reduce allocations, fixes
  • core:encoding/json Unmarshal fixes
  • core:hash/xxhash Fixes
  • core:path/filepath Add file stem and long-extension procedures
  • core:slice More helpers
  • core:strings Add Levenshtein distance
  • core:sync Improvements
  • core:thread New thread pool implementation
  • vendor:metal and vendor:darwin numerous additions and fixes
  • Quicksort minor fix

dev-2022-04

2 years ago

New Language Features

  • None

New Compiler Features

  • Rework of the entire atomic intrinsics (similar to C11 in design)
    • Atomic_Memory_Order enum
    • atomic_type_is_lock_free
    • atomic_thread_fence
    • atomic_signal_fence
    • atomic_store
    • atomic_store_explicit
    • atomic_load
    • atomic_load_explicit
    • atomic_add
    • atomic_add_explicit
    • atomic_sub
    • atomic_sub_explicit
    • atomic_and
    • atomic_and_explicit
    • atomic_nand
    • atomic_nand_explicit
    • atomic_or
    • atomic_or_explicit
    • atomic_xor
    • atomic_xor_explicit
    • atomic_exchange
    • atomic_exchange_explicit
    • atomic_compare_exchange_strong
    • atomic_compare_exchange_strong_explicit
    • atomic_compare_exchange_weak
    • atomic_compare_exchange_weak_explicit
  • union #shared_nil
    • This adds a feature to union which requires all the variants to have a nil value and on assign to the union, checks whether that value is nil or not. If the value is nil, the union will be nil (thus sharing the nil value)
  • Improved build script for the compiler
  • Numerous bug fixes

Compiler Improvements

  • Improve -help messages for define/config

New Packages

  • Completely redesigned core:sync
    • Designed from the ground up with making the zero value useful (no need to initialize nor destroy values)
    • Utilizes the abilities of modern OSes with native futex support
    • Primitives:
      • Mutex
      • RW_Mutex
      • Recursive_Mutex
      • Cond
      • Sema
      • Futex
    • Extended:
      • Wait_Group
      • Barrier
      • Auto_Reset_Event
      • Ticket_Mutex
      • Benaphore
      • Recursive_Benaphore
      • Once
  • core:math/ease

Package Improvements

  • Update Thread Pool in core:thread
  • More additions to core:sys/windows
  • Remove #caller_location from certain calls in core:container/small_array
  • vendor:stb/easy_font fixes/improvements
  • Update mem.nil_allocator to match the same implementation in runtime
  • Numerous improvements and additions to core:strings
  • Add nil check on ast.walk in core:odin/ast
  • Numerous bug fixes

dev-2022-03

2 years ago

New Language Features

  • [Enum]Type{...} checks for missing enumerated fields in a compound literal by default
    • Opt-out with #partial [Enum]Type{...}
  • #sparse[Enum]Type for non-contiguous enum fields used in an enumerated array type
    • #partial #sparse[Enum]Type{...} can be combined to allow for missing fields in a sparse enumerated array compound literal

New Compiler Features

  • OpenBSD support
  • Objective-C Runtime Intrinsics
    • intrinsics.objc_send
    • intrinsics.find_selector
    • intrinsics.find_class
    • intrinsics.register_selector (only required when creating Objective-C classes at runtime)
    • intrinsics.register_class (only required when creating Objective-C classes at runtime)
  • intrinsics.constant_utf16_cstring

Compiler Improvements

  • //+private file support
  • Numerous bug fixes
  • Removal of context.user_data
    • Prefer context.user_ptr

New Packages

Package Improvements

  • core:mem/virtual Linux Support
  • Add is_16_bit_from_memory to vendor:stb/image

dev-2022-02

2 years ago

New Language Features

None

New Compiler Features

  • Add #no_type_assert and #type_assert to disable implicit type assertions with x.(T)
  • Add ODIN_ERROR_POS_STYLE constant and -error-pos-style:<string> option to allow for default or unix style error messages

Compiler Improvements

  • Correct debug information logic for procedure parameters
  • General improvements to odin doc support the new https://pkg.odin-lang.org/
  • Correct //+private for odin doc
  • Make ODIN_ENDIAN a constant enum value rather than a string
  • Rename architecture 386 to i386
  • Improve entry code handling to support more platforms easily in the future
  • Improve/simplify quaternion casting

New Packages

  • core:container/lru
  • Rename core:path to core:path/slashpath

Package Improvements

  • slice.stable_sort* procedures
  • Add allocator parameter to rand.perm
  • rand.exp_float64
  • strings.split_lines* procedures

dev-2022-01

2 years ago

New Language Features

None

New Compiler Features

None

Compiler Improvements

  • Correct odin doc default parameter value init_string generation
  • Improve debug symbol retention with -debug -o:minimal
  • Disallow @(static) and @(thread_local) within defer statements
  • Improvements for Darwin ARM64 support
  • Improved float to quaternion conversion support
  • Improved global when handling

New Packages

  • Replace core:container with new packages
  • core:container/bit_array
  • core:container/priority_queue
  • core:container/queue
  • core:container/small_array

Package Improvements

  • Improvements to core:math/big
  • Improvements to core:odin/parser
  • Make strconv more robust
  • Fix typo in core:json/encoding from unmarshall to unmarshal
  • Remove the extra hidden 0 terminator from strings.clone and bytes.clone which was there for very old legacy reasons, prefer strings.clone_to_cstring when that behaviour is needed
  • Fix strings.fields_proc and strings.index_any
  • Fix math.prod
  • Add hash.djbx33a
  • Add sort.map_entries_by_key and sort.map_entries_by_value

dev-2021-12

2 years ago

New Language Features

  • Allow casting from floats to complex numbers and quaternions
  • @(linkage=<string>) for procedures and variables
  • @(require) for procedures
  • #load_hash(<filepath>, <string-hash-kind>)
  • -target:js_wasm32 target (custom Web JavaScript runtime to run Odin executables)

New Compiler Features

  • Add ODIN_NO_CRT global boolean constant
  • Add ODIN_BUILD_MODE global string constant
  • Allow compilation of assembly files on Windows through nasm.exe in conjunction with the foreign import system (.asm, .s, .S files)
  • -extra-assembler-flags:<string>
  • -timings-export:<string>

Compiler Improvements

  • Improve matrix related operations
  • Correctly support -default-to-nil-allocator for all platforms
  • -no-crt improvements on Windows
  • General wasm32 improvements
  • Internal compiler (not language) improvements to data structures
  • Improve compilation passes on LLVM 12.0.1 and LLVM 13.0.0 (compiler still defaults to LLVM 11.1.0)
  • Correct x in ptr logic
  • Numerous bug fixes

New Packages

  • vendor:raylib version 4.0
  • core:math/linalg/glsl - GLSL-like mathematics types and operations
  • core:math/linalg/hlsl - HLSL-like mathematics types and operations

Package Improvements

  • Make math procedures contextless
  • Add asinh , acosh, atanh
  • Represent matrices in fmt as expected
  • Make runtime builtin matrix procedures contextless
  • package runtime linkage improvements
  • linalg.matrix4_look_at_from_fru
  • Implement math.ldexp and math.frexp in native Odin
  • Add log1p, erf, erfc, ilogb, logb nextafter, gamma, lgamma, signbitto core:math
  • Add support for darwin to core:c/libc
  • Add numerous new core:crypto packages
  • Add os.read_at_least and os.read_full utility procedures
  • Correct reading from a console on Windows

dev-2021-11

2 years ago

New Language Features

  • matrix type
    • matrix[Rows, Columns]Element_Type
    • A matrix is a mathematical type built into Odin. It is a regular array of numbers, arranged in rows and columns
    • Multiplication between matrices and arrays
    • Component-wise operations
    • Submatrix casting square matrices
    • Submatrix casting non-square matrices
    • Column-major memory layout
    • Limited to a maximum of 16 elements
    • Supports integers, floats, and complex numbers (only)
    • Optimized for SIMD vectorization
    • Built-in procedures (Compiler Level)
      • transpose
      • outer_product
      • hadamard_product
      • matrix_flatten
      • conj
    • Built-in procedures (Runtime Level)
      • determinant
      • adjugate
      • inverse
      • inverse_transpose
      • hermitian_adjoint
      • matrix_trace
      • matrix_minor
  • odin report
    • Reporting of Platform Specific Information
  • wasi_wasm32 support
  • Improved WASM support in general

New Packages

  • core:crypto
  • vendor:ENet

Package Improvements

  • Improvements to vendor:OpenGL
    • Set VertexAttribPointer related calls to use uintptr instead of rawptr for the byte offset parameter
    • Convert all functions taking GLboolean to bool
  • Updates to core:sync/sync2
    • Generic Futex interface for each platform
    • Sema implemented with Futex
  • Improvements to core:mem/virtual to make usage consistent
  • Minor improvements to the SDL vendor packages
  • core:encoding/json - add alias for MJSON as Bitsquid
  • Improvements to vendor:microui
  • Improvements to vendor:raylib
  • Add more OOM checks within the core library
  • Unify runtime.memory_equal and runtime.string_eq logic
  • Add id to thread.Thread
  • Add slice.swap_between
  • Add experimental big.Rat

Compiler Improvements

  • intrinsics.unaligned_store
  • intrinsics.unaligned_load
  • intrinsics.mem_zero_volatile
  • offset_of_by_string
  • Heavily improve the LLVM struct type generation to improve ABI
  • Simplify map logic and code generation
  • Disallow or_return within defer
  • Fix strip-semicolon on some machines which didn't truncate correctly
  • Allow parsing for [^]T{} to improve error messages
  • Support LLVM 11, LLVM 12, and LLVM 13 in the code
  • Fix debug problems
  • Improved bit_set semantics