Xo 0.24 release notes
Introduction
Xo 0.24 makes native Maps and Sets a hybrid persistent map, which takes a mixed CRUD server at 1024 connections from 18.0k to 83.0k requests per second. Native code generation is level with LLVM on arm64 and about 6 percent behind on amd64, builds are faster, and the standard library gains XML, big numbers, compression, and a streaming JSON decoder.
Changes to the language
- Moves of the move-only builders are flow sensitive: a
return,break,continue, or failing?ends its path’s moves, so a value moved there is still usable after the branch (decision 0300). embedputs files in the binary (decision 0304).- A program’s own values convert to the capability interfaces (
Fs,Proc,Env,Net) on the native backends (decision 0307). - Wire names per format for JSON, SQL, and XML, and
derive Xml(decision 0315). - Prelude additions.
Compiler and runtime
- Native Maps and Sets are the hybrid persistent map by default; the micro benchmarks stay within 1.2 times the lists (decision 0291).
- Preemption polls on amd64 and on LLVM’s x86-64 code, with the thread-local table no longer reused across a poll (decision 0286).
- Native code generation level with LLVM on arm64 and about 6 percent behind on amd64 (the comparison).
- Faster builds: std interface hashing from tokens, per-file LLVM test splits, a run cache for std module tests, and reference counting insertion in about half its cold time.
- The Go backend compiles
pathanduuidfrom their Xo source and supports tuples of up to 64 elements (decision 0312).
Standard library
std/xml(decision 0314).std/big, with Karatsuba multiplication and recursive division (decision 0311).- JSON
omitemptyand a streaming decoder (decision 0309). std/compressand gzip responses;client_ip.- The HTTP/1.1 client keeps connections alive (decision 0303).
Tools
xo def,refs,rename, andsymbolscover runtime names, fields, variants, and interface methods.- The strict inliner verifier runs in
xo dev goldensand codegen checks. - Every Go test names the
xoit runs and refuses a stale one. --no-preempt;xo build --profile.- Backend cache pruning fixed (an overflow, concurrent accounting, a prune version guard).
Fixes
- CI and fresh builds work again: 0.23.0 cannot build them, because its
inliner verifier rejects
main.