DESIGN: re-frame Decision 9 as dual-allocator (not transitional)

The 18-arc validated the RC pipeline end-to-end; the orchestrator's
call (JOURNAL 2026-05-08) was to keep Boehm as default and RC as
the ready alternative rather than retire Boehm. Decision 9's
'transitional Boehm' framing was wrong shape for that policy —
this edit re-casts it as 'dual allocator: Boehm GC for general
workloads, RC for real-time-sensitive workloads', preserving the
rest of the section.

Decision 10 holds as the specification of the RC alternative; this
edit only changes the framing of how the two allocators relate.
This commit is contained in:
2026-05-08 15:16:05 +02:00
parent 05ec3515f4
commit f10a77e8e5
+21 -7
View File
@@ -543,14 +543,28 @@ constructor-blocked recursions in `map`, `sort`, `insert`
remain unmarked — they cannot benefit from `musttail` remain unmarked — they cannot benefit from `musttail`
without a source-level rewrite. without a source-level rewrite.
## Decision 9: transitional allocator — Boehm conservative GC ## Decision 9: dual allocator — Boehm conservative GC + RC
**Status: superseded by Decision 10 (RC + Uniqueness, 2026-05-08).** **Status: dual-allocator policy as of 2026-05-08.** Originally
This section documents the active runtime as of Iter 17a / the framed (2026-05-07) as "transitional Boehm until the RC
GC bench, but it is no longer the canonical memory model. Boehm pipeline (Iters 18a18g) lands and the default flips". The RC
remains linked behind `--alloc=gc` (the current default) until pipeline landed and was validated end-to-end (live=0 on the
the RC pipeline (Iters 18a18d) is validated and the default canonical bench fixture; tail latency 23× better than Boehm;
flips. The `--alloc=bump` mode introduced for the bench is a RSS lower than Boehm). The orchestrator's call on retirement
was to **keep both allocators live**: Boehm stays as the
default for general workloads, RC is selected via `--alloc=rc`
for real-time-sensitive workloads where bounded per-operation
latency matters more than peak throughput.
The retirement question reopens if maintaining the Boehm path
costs significant attention (libgc upgrade pain, runtime
divergence, build complexity); until then the dual-allocator
asymmetry (Boehm = default, RC = ready alternative) is the
canonical state. Decision 10 (RC + uniqueness) holds as the
specification of the RC alternative; the rest of this section
documents the Boehm half of the dual model.
The `--alloc=bump` mode introduced for the bench is a
measurement tool, not a production target. measurement tool, not a production target.
Through Iter 14e, every ADT box, lambda env, and closure pair was Through Iter 14e, every ADT box, lambda env, and closure pair was