Skip to content

v2026.6.2

Choose a tag to compare

@github-actions github-actions released this 23 Jun 04:28
10be453

Objeck Language v2026.6.2

Major JIT and garbage-collection performance work — a near-free GC safepoint poll, auto-JIT for closure/function-reference calls, and inline nursery allocation — together with a sweep of JIT codegen correctness fixes and locale-independent UTF-8 I/O.

✨ What's New

Performance

  • GC safepoint poll made nearly free in JIT'd loops — an inline flag test that calls the collector only when a collection is active, reading &stw_active from a register cached at the prologue (R12 on AMD64, X19 on ARM64) and emitted only at loop back-edges. fannkuchredux roughly halved (~59s → ~31s), recovering the full v2026.6.1 regression on both AMD64 and ARM64.
  • Auto-JIT for closure / function-reference calls (DYN_MTHD_CALL) on AMD64 and ARM64 — spectralnorm reaches native-level speed once warm (43s interpreted → 0.46s at n=2000).
  • Inline young-generation bump allocation for NEW_OBJ_INST (AMD64); an interpreter float fast-path; and ARM64 JIT whitelist parity with AMD64.

Bug Fixes

  • JIT float-codegen & tail-call correctness (surfaced by forcing JIT with OBJECK_JIT_THRESHOLD=1): AMD64 Floor/Ceil/ArcTan and two latent DYN_MTHD_CALL miscompiles; ARM64 transcendental/round cached-local operands, a dropped libc float result/argument, working-stack registers clobbered across inlined float calls, and an imm19 backpatch SIGILL; and a TCO deferred-load corruption (return Gcd(b, a%b)) on both architectures.
  • ARM64 closure SIGSEGV — invoking a JIT-compiled closure captured in a collection (Vector<FuncRef>) crashed because the ARM64 backend's memory encoders couldn't represent a negative displacement and read the wrong stack slot; all ARM64 load/stores now route through a signed-offset LDUR/STUR helper (x64 was never affected). The full ARM64 suite is green at OBJECK_JIT_THRESHOLD=1.
  • UTF-8 in any localeobc reading UTF-8 source and obr loading/printing UTF-8 strings no longer break under a C/non-UTF-8 process locale.
  • VM shutdown thread race — worker threads are quiesced before program teardown.
  • Int->MinSize() now returns INT64_MIN (was INT64_MAX).

Infrastructure

  • Native (non-Docker) cross-language perf gate in CI measures Objeck against Python/Ruby/LuaJIT/Java with committed baseline ratios, so performance regressions are caught automatically.

📦 Installation

Windows

  • x64: Download objeck-windows-x64_2026.6.2.msi and run the installer
  • ARM64: Download objeck-windows-arm64_2026.6.2.msi and run the installer
  • Portable: Download the .zip files for portable installations

Linux

  • x64: tar -xzf objeck-linux-x64_2026.6.2.tgz
  • ARM64: tar -xzf objeck-linux-arm64_2026.6.2.tgz

macOS

  • ARM64 (M-series) Installer: Download objeck-macos-arm64_2026.6.2.pkg and run
  • ARM64 (M-series) Archive: tar -xzf objeck-macos-arm64_2026.6.2.tgz

LSP (Language Server Protocol)

  • Download objeck-lsp_2026.6.2.zip for IDE integration

📚 Documentation

🔐 Verification

All Windows MSI installers and the macOS .pkg are digitally signed.


Full Changelog: v2026.6.1...v2026.6.2