From 4b10ee4a5f9debf7dbd9ad140e373e9fc7d3bc24 Mon Sep 17 00:00:00 2001 From: Brummel Date: Sun, 10 May 2026 11:46:14 +0200 Subject: [PATCH] design-md-consolidation 1.3: drop date anchors from DESIGN.md --- docs/DESIGN.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/DESIGN.md b/docs/DESIGN.md index f42b0de..cf6a3a0 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -682,10 +682,10 @@ without a source-level rewrite. ## Decision 9: dual allocator — RC canonical, Boehm parity oracle Originally framed -(2026-05-07) as "transitional Boehm until the RC pipeline +as "transitional Boehm until the RC pipeline (Iters 18a–18g) lands and the default flips"; then re-framed -(2026-05-08) as a symmetric dual-allocator policy with Boehm as -the CLI default. The 2026-05-09 revision flips the asymmetry to +as a symmetric dual-allocator policy with Boehm as +the CLI default. The revision flips the asymmetry to match Decision 10: - **RC is canonical.** `--alloc=rc` is the CLI default for @@ -832,7 +832,7 @@ is too. ## Decision 10: memory model — RC + Uniqueness with LLM-author annotations -**Committed 2026-05-08, after the GC bench (`bench/run.sh`) showed +**The GC bench (`bench/run.sh`) showed Boehm contributing ~60% of runtime on allocation-heavy workloads that hold the heap fully live. Sharpened later the same day: the mainstream "RC + inference" position was extended with mandatory @@ -1407,7 +1407,7 @@ monomorphised copies resolve to concrete drop fns). 6. **Iter 18f:** RC validation bench. RC validated within target on `bench/run.sh` (live=0; tail latency 23× better than Boehm; RSS lower). Retirement of Boehm executes in two steps: first a - default-flip (2026-05-09 — `--alloc=rc` becomes the CLI default, + default-flip (`--alloc=rc` is the CLI default, GC retained as parity oracle; see Decision 9 above); second a full removal once the oracle stops paying its keep (gating condition: a few iter families with no GC-only diagnostic @@ -1433,7 +1433,7 @@ materialises with a real workload. - **Does not infer everything.** An earlier draft of this Decision said "uniqueness is fully inferred" — that was the - mainstream RC position. The 2026-05-08 follow-up discussion + mainstream RC position. A follow-up discussion replaced it: AILang demands annotations *because* the LLM author can produce them effortlessly. The compiler does inference *plus* verification of contracts. @@ -1448,7 +1448,7 @@ materialises with a real workload. ## Decision 11: typeclasses — Haskell-lite, monomorphised, coherent -**Committed 2026-05-09 (Iter 22a), as the design pass that gates +**The design pass that gates 22b implementer work. Codified after the Feature-acceptance criterion (this document, above) was committed; the criterion is the explicit basis for the choices below.** @@ -1608,7 +1608,7 @@ between a hand-written `show_int` and a synthesised `show__Int`. **Why mono, not virtual dispatch (the empirically-grounded version).** The original rationale implicitly argued that mono saves a per-call -indirect-jump cost. The 2026-05-10 mono-vs-vdisp micro-benchmark +indirect-jump cost. A mono-vs-vdisp micro-benchmark (`bench/mono_dispatch.py`, JOURNAL entry of the same date) refutes that specific claim: on a saturating branch predictor with a monomorphic indirect target, indirect dispatch is free relative to @@ -1720,7 +1720,7 @@ axis-5 (kind `*` only) covers the space. the param. - **Higher-rank polymorphism** (`forall a. (forall b. b -> b) -> a`). Already rejected at parse time per the typeclass-conversation - rationale recorded in JOURNAL 2026-05-09; constraint-bearing + rationale recorded in JOURNAL; constraint-bearing signatures inherit that prohibition. - **Existential / dyn dispatch** (`exists a. Show a => a`, heterogeneous lists like `[Show]`). Schema does not express @@ -2021,7 +2021,7 @@ canonical-JSON hash. Two allocator backends share the same MIR. `--alloc=rc` is the canonical backend committed to in Decision 10 and the CLI default -since 2026-05-09: the typechecker enforces +the typechecker enforces `(own)` / `(borrow)` modes, codegen emits `ailang_rc_inc` / `_dec` calls at the points dictated by linearity, and `Term::Clone` / `Term::ReuseAs` materialise into actual rc-bumps and in-place