mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-24 06:14:01 +08:00
SCRIPTC_YOUNG_NURSERY=1 at compile time makes an executable allocate traced, program-owned class instances and records young and link the collector unit built with SCR_YIN (a runtime pack variant of scr_cycle.c; libraries never get it). The emitted constructor lists the object in a per-thread nursery and marks its header: generation SCR_CYC_YOUNG and its nursery index under the buffered bit, so every existing release path treats it as a buffered candidate (no call while it stays alive; scr_cyc_on_dead takes it out of the nursery at its death). A nursery collection (whenever 4096 young objects are live, at collection points, before full sweeps and limited passes) counts each young object's references from other young objects, marks from the objects whose count is below their reference count (referenced from outside the nursery: stacks, globals, older objects, runtime structures, FFI, fibers, coroutine frames), frees what stays unmarked, and gives up the dead set's outgoing edges after the teardowns. The counts are recomputed at every collection instead of maintained by a store barrier, so soundness rests only on the invariants trial deletion already needs. Survivors join trial deletion's nursery and outside roots become candidates; trial deletion walks young objects it reaches as nursery-level objects. Per-type admission statistics send types that do not die in young cycles back to trial deletion for a while. Publication takes young objects out of the nursery. The RC audit build checks nursery membership and counts at every collection. With the flag off, the compiler emits and links exactly what it did before (249 programs and the self-hosted compiler compared byte-identical). Measured with the flag on: cg-rings -38%, cg-pairs -27%, the runtime suite geomean -0.3% (published-graphs +3.4%), the self-hosted compiler neutral; shapes whose cycles go through arrays or closures (phase 2) pay without gaining. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>