Correctness-complete. Both engines — the tree-walker behind the public aowli-interp / aowli-dbg, and the internal bytecode VM — now hit zero in-scope divergence across a 423-program differential corpus run against the nimony compiler. The engines agree with each other and with native, program for program.
What landed since v0.2.2 (perf pass)
- object value-copy (
=copy) semantics — assigning or binding a value object, tuple, or value array copies the envelope (references stay shared), sovar x = a; x.a = 999no longer mutatesa. A real aliasing bug in the value model, fixed. - the last OS-boundary gaps — real host
stat/lstat(sofileExists/dirExistsare correct instead of silently false), pointer-identity in==/!=, andcast[int](ptr)flat-memory round-trip. - broad correctness — float→int conversion, block-expression values, cyclic-import initialization, a self-nested-iterator hang, and
Table-element write-back (inc t[k]).
Scope
{.emit.} of literal C source plus C-level FFI is not handled by the pure value interpreter — it's territory for the hybrid-native provider (running that module through the real C toolchain as a shared object), which is on the roadmap. It is not a correctness gap in the interpreter.
Binaries
Hardened (IR control-flow obfuscation + fail-closed licence gate + strip --strip-all + provenance-section removal). This build is licensed through 2026-08-24; after that it refuses to run — grab a newer build. SHA256 + VirusTotal for each binary are in the README.
chmod +x bin/aowli-interp bin/aowli-dbg
./bin/aowli-interp <module.s.nif>