diff --git a/docs/roadmap.md b/docs/roadmap.md index f3bca06..b774afd 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -41,23 +41,34 @@ context. Pick the next milestone from P1.)_ ## P1 — Next -- [x] **\[milestone\]** Post-22 Prelude — Eq/Ord — shipped milestone - 23 (2026-05-12). `Ordering` ADT, `Eq`/`Ord` classes, primitive - instances on Int / Bool / Str, polymorphic free fns - `ne`/`lt`/`le`/`gt`/`ge`, runtime `ail_str_eq` + `ail_str_compare`, - end-to-end coverage including user-ADT-instance integration. Float - has neither instance by design; polymorphic helpers at Float fire - Float-aware `NoInstance` per DESIGN.md §"Float semantics". +- [ ] **\[milestone\]** Heap-`Str` ABI — runtime infrastructure for + malloc-backed, refcounted `Str` values alongside the existing + static `@.str_*` globals. Today the `Str` path is static-only + (DESIGN.md §"Float semantics" notes this explicitly), so any + primitive that needs to produce a `Str` at runtime — `int_to_str`, + `float_to_str` (currently type-installed but `CodegenError::Internal` + on call), eventual `Show.show`, future `++` on strings — cannot + ship. Scope: pick the representation (likely a `{rc_header, len, + bytes…}` slab consistent with the rest of the RC runtime), teach + codegen to accept both static and heap `Str` at the same ABI slot, + wire RC `inc`/`drop`/`clone`/`compare`/`eq` on the heap form, and + ship `int_to_str` + `float_to_str` as the first two callers so the + ABI gets exercised end-to-end. Unblocks Show + print rewire below. + - context: DESIGN.md §"Float semantics" (`float_to_str` is type- + installed, codegen-deferred); spec 2026-05-11-23-eq-ord-prelude + §"Show. Defers behind a heap-Str-ABI milestone"; spec + 2026-05-10-fieldtest-floats §F4 ("dynamic Str allocation in the + runtime"); spec 2026-05-09-22-typeclasses §22b.4b ("Show#Int + needs an `int_to_str` primitive returning heap-allocated Str"). - [ ] **\[milestone\]** Post-22 Prelude — Show + print rewire — ship `Show` typeclass with `Show Int/Bool/Str/Float` instances; rewire - `print` through `Show.show`. Gated on heap-`Str` ABI runtime work - (`int_to_str` needs to allocate). Originally queued as 22b.4 in - the typeclass milestone, kept on hold pending demand and the + `print` through `Show.show`. Originally queued as 22b.4 in the + typeclass milestone, kept on hold pending demand and the heap-`Str` prerequisite. - - context: brainstorm 2026-05-12 (iter 23.5 wrap). Heap-`Str` ABI - is the load-bearing prerequisite; until it ships, `Show Int` + - depends on: Heap-`Str` ABI (above). Without it, `Show Int` cannot allocate a `Str` to return. + - context: brainstorm 2026-05-12 (iter 23.5 wrap). ## P2 — Medium-term