Workstream B — the per-object footprint half of #7469, which was quantified but never implemented.
Workstream A is done and closed (#7565/#7566: TLS resolution count + the loop-site inline-bump gate, churn_alloc 1.81× at +0 bytes for non-loop sites), which exceeded its own ≥2× acceptance bar. B never started, and #7469 is being closed so its remaining scope stops hiding behind a finished umbrella.
What is actually left
crates/perry-runtime/src/object/mod.rs:24 still reads:
pub(crate) const INLINE_SLOT_FLOOR: usize = 4;
unchanged since the measurement. Every object allocation therefore reserves at least 4 slots regardless of the shape's real field count — js_object_alloc(0, 0) (the {} and FFI path) allocates 4 slots for zero fields.
The measurement to start from, and its ceiling
#7469's own footprint work measured 136.9 B/record = 84.4 B arena + 52.6 B OUTSIDE the arena. That out-of-arena half is the important number: it caps any purely-arena remedy at ~113 B/record, not the ~80 B a naive reading of the arena figure suggests. Anyone picking this up should re-derive both halves before designing, because a right-sizing change that only moves the 84.4 B cannot reach the target.
Two warnings from the last attempt
Bench host per the standing rule: the quiet M1 mini, not a dev Mac.
Workstream B — the per-object footprint half of #7469, which was quantified but never implemented.
Workstream A is done and closed (#7565/#7566: TLS resolution count + the loop-site inline-bump gate,
churn_alloc1.81× at +0 bytes for non-loop sites), which exceeded its own ≥2× acceptance bar. B never started, and #7469 is being closed so its remaining scope stops hiding behind a finished umbrella.What is actually left
crates/perry-runtime/src/object/mod.rs:24still reads:unchanged since the measurement. Every object allocation therefore reserves at least 4 slots regardless of the shape's real field count —
js_object_alloc(0, 0)(the{}and FFI path) allocates 4 slots for zero fields.The measurement to start from, and its ceiling
#7469's own footprint work measured 136.9 B/record = 84.4 B arena + 52.6 B OUTSIDE the arena. That out-of-arena half is the important number: it caps any purely-arena remedy at ~113 B/record, not the ~80 B a naive reading of the arena figure suggests. Anyone picking this up should re-derive both halves before designing, because a right-sizing change that only moves the 84.4 B cannot reach the target.
Two warnings from the last attempt
#[cold]install split regressed — read the area's topic notes before coding.Bench host per the standing rule: the quiet M1 mini, not a dev Mac.