roadmap: heap-Str ABI as P1 milestone, blocker for Show + print rewire

Names the runtime infrastructure prerequisite (malloc-backed refcounted
Str alongside static @.str_* globals) as its own milestone. Show + print
rewire now carries an explicit depends-on link. Existing Eq/Ord [x]
entry removed (shipped milestone 23; mirrored in WhatsNew + journal).
This commit is contained in:
2026-05-12 10:47:35 +02:00
parent e953b137eb
commit ef1ebf2138
+23 -12
View File
@@ -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