Changelog

All notable changes to Objeck will be documented in this file.

[v2026.10.3] - 2026-11-03

A hardening release: the garbage collector now knows exactly which words of compiled code are references on x64 and ARM64, the loader is fuzzed and verifies programs before it runs them, errors are returned instead of ending the host process, and the HTTP client stops running Windows out of ports.

Upgrading: the .obe and .obl file formats changed (magic 0xffbf for programs, 0xffba for libraries) because an Int[] and an object array are now different heap kinds: recompile your programs and rebuild any library of your own with this toolchain. A program or library built by an earlier version is refused with a message saying so.

Runtime and garbage collector

Loader and compiler

Networking

Libraries

Language server

Debugger

Testing, CI and documentation

Upgrading

[v2026.10.2] - 2026-10-31

Objeck gains a database in the standard library: Query.Structured is now a columnar engine with SQL joins, grouping, indexes and expressions over typed in-memory tables, files and URLs named in FROM, a crash-safe .otab file format, and sources that read CSV, JSON, XML, text logs, filesystems, zip and tar archives, Excel workbooks, ODBC databases, System.ML results and image detections as tables. The runtime collects in proportion to live data and allocates without searching, Collection.Hash is open-addressed with unboxed IntVector/IntMap/BitSet beside it, calls nest 16,384 deep, DTLS works for the first time, every socket failure says why, servers take IPv4 and IPv6 clients on every platform, and Windows handles non-ASCII arguments, environment variables, paths and console text. System.ML gains kernel and one-class SVMs, six outlier detectors and an autoencoder, a new System.ML.Lab for experiments, result tables and charts, and BERT sentence embeddings over ONNX; Data.JSON decodes escapes when it parses, so a document reads back as it was written; the JIT compiles code it used to hand back to the interpreter and no longer loses a value at a loop's collection safepoint; the collector keeps a conditional's value alive across another thread's collection; and the language server analyzes each edit once, about twice as fast. Probing six libraries and the compiler fixed defects in CSV, JSON, regular expressions, NLP, ML, Ollama, OpenAI, Gemini, SDL2, ODBC, numeric literals, name resolution and array literals. The first AI-foundation pieces arrive: System.NLP.Onnx.TextClassifier runs a Hugging Face text classifier as Python's pipeline does, System.AI.Hub.HubClient downloads models by name into a verified cache, BpeTokenizer matches RoBERTa's and GPT-2's tokenizer id for id, and GetToFile streams any download to disk; a redirect to another host no longer receives the caller's credentials; and objects keep their instance IDs when the collector moves them, so Hash and Map keyed by objects keep their entries.

Upgrading: every .obl is a new format (magic 0xffb9): rebuild any library of your own with this toolchain. The full list of behaviour changes is in the Upgrading section at the end of this entry; the ones most likely to touch a program are an .obe from an earlier release being refused (recompile), Directory->List no longer returning . and .. on Windows, a leading-zero integer literal (010) being a compile error with 0o10 as octal, Byte->CompressBr renamed CompressDeflate, Data.JSON decoding escapes when it parses (stop calling JsonElement->Decode), TF_IDF->New() smoothing and normalizing by default, Byte[]->ToHexString returning a digest, Hash iteration order changing, and a call stack that defaults to 16,384 frames rather than 256.

Query.Structured

AI foundation

The first steps of docs/AI_FOUNDATION_DESIGN.md (#1451): use Hugging Face models from Objeck the way Python does, with no Python installed.

Runtime

Concurrency and the call stack

Networking

Windows and Unicode

Compiler and language

JIT

Libraries

Tooling

CI and release

Known issues

Upgrading

Every behaviour a program could notice, with the change that made it:

[v2026.10.1] - 2026-10-20

Objeck gains structured error handling (try/on/finally over Error objects), named arguments, method-level generics, reference parameters, expression array literals and jagged arrays; the language server is rebuilt around LSP 3.17; and more than a hundred defects found by Rosetta Code tasks are fixed.

Upgrading: the language grows -- try, on, finally and ref are contextual, so no existing name stops compiling -- and every .obl is a new format (magic 0xffb8): rebuild any library of your own with this toolchain. Standard-library parameter names are now public API, because a call can name them.

Language

Language server

Packaging

Libraries

Bug Fixes

Platforms

Build

Release

Infrastructure

[v2026.10.0] - 2026-10-11

Any ONNX model can be run from Objeck, either in-process or on a model server, behind one interface; releases now ship a signed manifest; System.ML gains what it needs to evaluate a classifier under a false-positive budget; and a compiler bug produced an infinite loop at the default optimization level.

Upgrading: programs that use API.Onnx or API.Inference must add -lib models and use API.Models. The two libraries each defined their own Tensor; there is now one, in a library they share. Library dependencies are not transitive in Objeck, so this is a compile error until the -lib list is updated -- including for programs that never mention a tensor. Two helper methods containing the same construct were inlined into one shared label space, so the second one's jump resolved to the first one's label -- a backward jump into already-executed code. -opt s3 is the default, so this needed no flag to reach. Separately, out-of-fold scores, metrics at a chosen threshold, bootstrap confidence intervals and per-group recall make the whole evaluate-under-a-budget protocol expressible without hand-written glue.

Compiler

Runtime

ONNX

Libraries

Machine Learning

Infrastructure

[v2026.9.7] - 2026-09-28

Supervised classification becomes usable end to end, three defects that all treated a Bool array as int-width are fixed, and float comparisons involving NaN follow IEEE. System.ML could fit a model but not honestly evaluate one: there was no way to hold a scaler's statistics across a train/test split, no stratified fold, no metric that took a score rather than a decision, and no classifier that split continuous features. All of that is here, with a cross-validation runner over a common interface. Separately, a Bool[] returned from a method was mishandled in three different places — one refused to compile, one silently read the wrong bytes, and one aliased instead of copying. And on Windows every comparison involving NaN returned true, so NaN compared equal to 1.0 while being both less than and greater than it.

Machine Learning

Compiler

Three defects in one family: a Bool array returned from a method was treated as int-width in three separate code paths. A Bool[] held in a local was correct throughout, which is what made each of them look like something else.

Runtime

Updater

Tooling

[v2026.9.6] - 2026-09-19

A correctness release for the machine-learning library and for the two places Objeck runs code that are not obr: the REPL and the embedding API. System.ML returned wrong numbers on fractional data, grouped points into empty clusters, and stopped the program on shapes it could not combine rather than saying so. obi and embedded programs used HTTP/1.1 without mentioning it, and on ARM64 obi aborted at the end of every run. Two crashes that only ARM64 machines ever saw are fixed, one of them in the collector.

Bug Fixes

Infrastructure

Documentation

[v2026.9.5] - 2026-09-19

Linux ARM64 users: v2026.9.4's binaries stop with "Illegal instruction" on most ARM64 CPUs (anything without SVE: Raspberry Pi 4/5, Graviton2, Snapdragon X, Apple silicon in a Linux VM). This release fixes that. Beyond it, a correctness and hardening release across the compiler, the garbage collector and the roughest corners of the language. Almost none of it was found by running programs: it was found by a heap verifier that checks the generational collector's invariants inside stop-the-world, a differential runner that holds every regression test to the same output at -opt s0 and -opt s3 under the interpreter and both JIT settings, and a program fuzzer that compares the same generated program across those configurations. Lambdas and enums account for most of the compiler fixes. Int arithmetic now has one definition shared by the interpreter, obc's folder and both JITs, which changes what >>> returns for a shift count outside 0-63.

New Features

Bug Fixes

Performance

Infrastructure

Documentation

[v2026.9.4] - 2026-09-15

A corrective release for the compiler: two optimizer rewrites computed some integer divisions wrong at the default optimization level, with no error. Programs compiled with v2026.9.3 or earlier at -opt s2 or -opt s3 (the default) should be recompiled.

Bug Fixes

[v2026.9.3] - 2026-09-14

Bug Fixes

Infrastructure

[v2026.9.2] - 2026-09-13

A corrective release for v2026.9.1's native libraries: macOS ships OpenCV and ONNX again, Linux x64's ONNX loads without LD_LIBRARY_PATH, and Linux ARM64 no longer carries an x86-64 ONNX Runtime. Underneath all three, the deploys verified what they built and ignored the answer. They now stop instead of shipping incomplete -- on a missing native library, and on a missing file an example opens by name -- and the deploy scripts say what they are doing while they run.

Bug Fixes

Infrastructure

Documentation

[v2026.9.1] - 2026-09-12

Compiled code now calls compiled code directly -- a bound call 26.5 ns to 5.5 ns, a virtual call 125 ns to 6.0 ns, Fib(32) 0.208 s to 0.043 s -- and three ways compiled code could corrupt memory are closed. Every string hash was wrong; JIT arithmetic now matches the interpreter, and the JIT is 2-8x faster on the loops programs actually write; the debugger sees threads and tells the truth about what its commands do; Game.OpenGL gains a sky, rotations, normal maps and emissive materials; and the release process reports what it actually did. Found by running the v2026.9.0 release and then surveying every binary and library for the bugs a compiler, VM and debugger platform cannot carry.

At a Glance

The largest entry in this changelog by some distance — 100 bullets across 26 issues and pull requests, against 42 for the next biggest (v2026.8.2) — and weighted heavily toward correctness rather than features.

AreaCountThe short version
Bug fixes44Every string hash was wrong. Three ways compiled code could corrupt memory. Nine debugger commands reported success while doing the wrong thing.
Virtual machine25The F7 calling convention, jump tables for a dense select, checked VM flags, runtime properties and locales, POSIX exit codes.
Infrastructure11Libraries rebuilt by their own compiler, the every-method-compiled CI pass on all five legs, release gating that fails instead of skipping.
New features6Threads the debugger can see, Game.OpenGL sky/quaternions/normal maps/emissive materials.
Compiler6Short-circuit conditions, name resolution that stops copying the library maps, the func-ref inliner fix.
Testing3A guard on the headline performance number, and fixtures for the fixes above.

Performance. A bound call went from 26.5 ns to 5.5 ns, a virtual call from 125 ns to 6.0 ns, and Fib(32) from 0.208 s to 0.043 s on AMD64 (17.1 → 7.4 ns and 0.135 → 0.050 s on an M4 Max). Measured end to end on the benchmark suite (docs/performance.md, 2026-09-12): spectralnorm 16.4x, binarytrees 3.9x, nbody 2.3x, and micro-benchmarks up to 53x. fannkuchredux and mandelbrot did not move.

The three that matter most if you are upgrading. Every Hash->SHA256, HMAC or signature Objeck computed over a string was wrong, because a Byte[] carried its element count plus one in the word native libraries read — no digest ever matched another implementation. A constant character stored into a Char[] overwrote its neighbours on ARM64 and Linux x64, including inside String->Pop() and String->Delete(). And a compiled frame holding a declared-but-unreferenced local was scanned by the collector under the wrong types.

New Features

Bug Fixes

Testing

Compiler

Infrastructure

Virtual Machine

The measured findings of docs/JIT_CODEGEN_ASSESSMENT_2026_09.md (#728), landed in #731, #732 and #733 with the interpreter/JIT equivalence fixture, the flag tests and the regression suite (normal, and with every method JIT-compiled) green, and all five CI legs green on the combined tree:

Documentation

Known Issues

[v2026.9.0] - 2026-09-03

A socket close that stops losing the response on Windows loopback, a language server that no longer serializes every request behind one lock, and a release pipeline that reports what it actually did.

Bug Fixes

Infrastructure

[v2026.8.4] - 2026-08-30

The release is dominated by one thing: Game.OpenGL, a 3D graphics framework built from nothing to a shipping library over roughly forty commits. Beside it sit a library that had never been usable, a class of JIT bugs that produced wrong arithmetic with no diagnostic, three ways the collector could destroy a live object, and a Windows ARM64 distribution that shipped without the runtimes it needs.

New Features

Bug Fixes

Performance

Testing

Infrastructure

[v2026.8.3] - 2026-08-19

A full static-analysis pass. Coverity Scan now runs on Windows as well as Linux, and this release works through both reports: crashes reachable from library input, two hangs, a class of stream-format leaks, and the unguarded entry points behind every “terminated with no message”. Alongside it, the Windows installer signing pipeline was corrected — it had been reporting signatures it never produced.

Bug Fixes

Performance

Concurrency

Release and Infrastructure

[v2026.8.2] - 2026-08-16

Supersedes v2026.8.0 and v2026.8.1, which were withdrawn; this entry covers everything since v2026.6.4.

New Features

Security

Bug Fixes

Build

Tooling

[v2026.6.4] - 2026-06-28

Bug Fixes

[v2026.6.3] - 2026-06-27

New Features

Bug Fixes

Performance

Libraries / Infrastructure

[v2026.6.2] - 2026-06-19

Performance

Bug Fixes

Libraries

Infrastructure

[v2026.6.1] - 2026-06-14

New Features

Security

Bug Fixes

Performance

Documentation / Infrastructure

[v2026.6.0] - 2026-06-07

New Features

Breaking Changes

Bug Fixes

Libraries

Performance

Documentation / Infrastructure

[v2026.5.4] - 2026-05-28

Bug Fixes

Infrastructure

[v2026.5.3] - 2026-05-24

New Features

Bug Fixes

Security / Performance

Performance

Infrastructure

[v2026.5.2] - 2026-05-17

New Features

Bug Fixes

Libraries

Infrastructure

Website

[v2026.4.3] - 2026-04-12

New Features

Bug Fixes

Infrastructure

[v2026.4.2] - 2026-04-06

New Features

Libraries

Performance

Bug Fixes

[v2026.4.1] - 2026-04-05

Changes

[v2026.4.0] - 2026-04-05

New Features

Performance Optimizations

Networking & I/O

Libraries

CI/CD & Infrastructure

Bug Fixes

[v2026.2.1] - 2026-02-26

New Features

Performance Optimizations

Improvements

Internal

[v2026.2.0] - 2026-02-12

New Features

Performance Optimizations

New Platform Support

Collections and String Improvements

CI/CD and Infrastructure

Compiler Improvements

Bug Fixes

[v2025.7.0] - 2025-07-01 ✅

Added

Changed

Fixed

Previous Releases

For releases prior to v2025.7.0, please see the commit history on GitHub: https://github.com/objeck/objeck-lang/commits/master


Versioning

Objeck uses calendar versioning (CalVer) with the format YYYY.MINOR.PATCH:


Back to README