0.2.9
Features
os.availableParallelism()works in static programs.--detached-exitfrees the address space afterprocess.exitoff the critical path, so large programs exit sooner.
Performance
- Cycle-capable objects are smaller. A 16-byte collector header, typed rest spreads, leaf capture boxes, rarely used array storage moved out of line, and tracing only types that can actually lie on a cycle.
- The heap and cycle collector scale better. Busy small-object slices use transparent huge pages, the collector's growth fraction widens further on large live heaps, and
Map/Setclearanddeletecost O(live) rather than O(peak). - Indexed reads are cheaper. Typed-array reads stay plain numbers where
undefinedacts likeNaN, unproven indexes are checked with a signed round trip, lengths and in-range indexes convert to doubles without the unsigned sequence, nullable-union array elements are read inline, and counted loops that start from an unproven value run on integer counters. - Worker programs pay less overhead. Fewer termination polls, an exact per-thread pending word, a call-free macOS stack guard, and exiting worker threads return their free pages to the system.
- More receivers and fields stay native. Optional-chain receivers are borrowed,
int32fields surviveErrorsubclasses that forward constructor arguments, and method calls stay native when only an unrelated callback field shares the name. - Compiler-scale programs compile without hitting V8's string limit. Serialized IR is streamed.
Fixes
- More values behave as in Node.js. Missing array and typed-array reads stay
undefinedthrough number arguments, narrowed slots and lambda results, andnullstays distinct from the temporal dead zone in forward-captured bindings. - Union class fields work in more shapes. Optional base-class receivers are narrowed before shared field access, and fields declared with different types across a union can be read and written.
- Workers share descriptor tables safely, and live array references are accessed one element at a time.
- Native program objects use runtime ABI v12. Runtime object layouts changed, so external object consumers must link the matching v0.2.9 runtime pack; the versioned marker rejects incompatible runtime objects at link time.