design-md-consolidation 2.2: condense Decision 9 narrative-of-changes opener + drop pre-Decision-9 history paragraphs

This commit is contained in:
2026-05-10 12:27:51 +02:00
parent 86fd5dec0b
commit 2539b0e728
+1 -16
View File
@@ -649,11 +649,7 @@ without a source-level rewrite.
## Decision 9: dual allocator — RC canonical, Boehm parity oracle
Originally framed
as "transitional Boehm until the RC pipeline lands and the default flips"; then re-framed
as a symmetric dual-allocator policy with Boehm as
the CLI default. The revision flips the asymmetry to
match Decision 10:
AILang ships two allocator backends with an asymmetric role:
- **RC is canonical.** `--alloc=rc` is the CLI default for
`ail build` and `ail run`. The runtime AILang's memory model
@@ -679,17 +675,6 @@ diagnostic leverage. Decision 10 (RC + uniqueness) holds as the
specification of the canonical runtime; the rest of this section
documents the Boehm half, retained as the oracle.
The `--alloc=bump` mode introduced for the bench is a
measurement tool, not a production target.
Originally, every ADT box, lambda env, and closure pair was
allocated with bare `malloc` and never freed. That worked for the
17 test fixtures (all small, all short-lived) but is incompatible
with any real workload — a stdlib `fold` over a million-element
list would leak a million boxes. The "Goal" section's "no GC for
the MVP" framing predates the parameterised-ADT pipeline and the
explicit-recursion expectation; both make a collector necessary.
**Choice: Boehm-Demers-Weiser conservative GC.** The simplest
working option: