From 2539b0e728824577cabed26071fb30700975053a Mon Sep 17 00:00:00 2001 From: Brummel Date: Sun, 10 May 2026 12:27:51 +0200 Subject: [PATCH] design-md-consolidation 2.2: condense Decision 9 narrative-of-changes opener + drop pre-Decision-9 history paragraphs --- docs/DESIGN.md | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/docs/DESIGN.md b/docs/DESIGN.md index e5519cd..5a35278 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -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: