A month of work in one release, and the widest one yet. Signed and notarized builds for macOS and both Linux architectures are up, with checksums.
#The interpreter caught Lua
On our benchmark suite the interpreter now beats the Lua 5.4 interpreter on the overall score, with no flags and nothing to opt into. That is the plain interpreter, not the JIT.
Under the JIT, linearly recursive functions got about 40% faster on ARM64 and about a third faster on x86-64, because a function whose recursive call is the last thing it does now compiles as a loop rather than a call chain. Self-recursive code (parsers, tree walks, anything that calls itself) got roughly 30% faster on ARM64 from deeper inlining.
Two changes to how values are stored did the rest. An array that has only ever held numbers is now stored unboxed, automatically, with no annotation. And entity-style code, the records-in-a-list shape most game logic is written in, now reaches full JIT speed instead of falling back.
#Embedding: hibernation, and your own modules can park
A host can freeze a session actor to a blob and wake it later, including a session that was frozen mid-call: it wakes with the answer in hand rather than restarting the call.
scua_return_pending extends that to modules you register
yourself. A native of yours can park, hand control back to your event
loop, and hibernate exactly like the built-in capabilities do. Before
this, only the built-ins could.
#Day one
scua init [name] scaffolds a small runnable project
rather than an empty directory.
The debugger now resolves module imports, so a multi-file program of
the kind scua init produces can be debugged as one program.
Its call stack reports the file each frame belongs to, so stepping into
a function in another module works.
The editors explain fn and return forms on
hover.
#Getting it
The changelog has the full accounting. If you are evaluating SCUA, this is the release to pick up.