design-md-consolidation 1.3: drop date anchors from DESIGN.md

This commit is contained in:
2026-05-10 11:46:14 +02:00
parent ef8c983720
commit 4b10ee4a5f
+10 -10
View File
@@ -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 18a18g) 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