7.6 KiB
AILang Roadmap
Priority-ordered list of upcoming work — milestones, features, todos, and ideas. The orchestrator maintains this file. The user can request additions; the orchestrator chooses what to remove or reprioritise as work progresses.
Conventions
- One checkbox per entry.
- [ ]is open;- [~]is in progress (work has started — a plan exists, a branch is open, or commits are landing);- [x]is done. A finished entry may stay briefly for context, then is removed (with a one-line mirror indocs/JOURNAL.md). - Each entry is tagged by kind and lives under a priority
bucket:
- [milestone] — big chunk that will get a
docs/specs/<milestone>.md. - [feature] — smaller addition inside a milestone, no full spec.
- [todo] — concrete task that can run without a brainstorm (cleanup, doc fix, mechanical refactor, test backfill).
- [idea] — not yet decision-ready, no commitment.
- [milestone] — big chunk that will get a
- Optional
depends on:line names another entry that has to land first. - Optional
context:line points to the JOURNAL entry where the rationale lives. The roadmap is intentionally terse; rationale stays in JOURNAL. - Priority buckets:
- P0 — in flight. Spec or plan already exists.
- P1 — next up. Decision made; not yet started.
- P2 — medium-term. Decided in principle, scheduled later.
- P3 — ideas. No commitment; may be cut.
P0 — In flight
- [milestone] Floats — introduce
Floatas IEEE-754 binary64 primitive type. One float type only (nof32). IEEE-conformant equality:eq : Float → Float → BoolreturnsfalseforNaN == NaN; noEqinstance (the partiality is real and surfaces throughMaybe-shaped comparators rather than through a lying total instance).Ordlikewise partial:compare : Float → Float → Maybe Ordering. Includes literal syntax in Form-A + Surface, codegen for arithmetic ops, conversions Int↔Float, andShow-style printing without the typeclass machinery (the typeclass wiring lands in Post-22 Prelude).- context: this conversation (2026-05-10) — Float status quo
was "documented as a primitive but never implemented";
crates/ailang-core/src/canonical.rs:14says "no floats".
- context: this conversation (2026-05-10) — Float status quo
was "documented as a primitive but never implemented";
P1 — Next
- [milestone] Post-22 Prelude — ship
Show/Eq/Ordwith the three total-orderable primitive instances (Int, Bool, Str); rewireprintthroughShow.show. Float getsShowbut notEq/Ord(partial — see Floats milestone). Originally queued as 22b.4 in the typeclass milestone, kept on hold pending demand.- context: JOURNAL 2026-05-09 ("JOURNAL queue"). Floats milestone closed 2026-05-10 — partial-Eq/Ord-for-Float story is documented in DESIGN.md §"Float semantics", so the Prelude can decide what's instanced (Show: yes, Eq/Ord: no for Float).
P2 — Medium-term
-
[feature] Operator routing through
Eq/Ord—==,<etc. resolved via the typeclass instead of the built-in primitive comparators. No commitment; gated on bench re-baselining to make sure the indirection doesn't tank latency.- context: JOURNAL 2026-05-09
- depends on: Post-22 Prelude
-
[todo]
types/ctor_indexoverlay shape question — decide whether the env's two parallel ctor maps should collapse into one overlay, or stay split. Surfaced during the env-construction unify audit.- context: JOURNAL 2026-05-10 ("Audit close: env-construction unify")
-
[feature] 22c — typeclass corpus expansion. User-defined classes beyond the prelude four; multi-parameter classes; superclass chains; richer instance bodies. Deferred from milestone 22.
- context: JOURNAL 2026-05-09
-
[todo] Boehm full retirement — remove the transitional Boehm GC path now that RC + uniqueness is the canonical memory story.
- context: JOURNAL pre-22, "Boehm transitional"
-
[feature] Closure-pair slab / pool — codegen tweak to pool the env+code closure pairs instead of one-shot heap allocs. Bench-gated.
-
[todo]
FnDef::syntheticflag — formalise the monomorphiser-emitted FnDefs so downstream passes can tell user-authored from synthesised at a glance. Currently inferred from symbol naming. -
[todo] 21'h iteration — final 21' carry-over (latency methodology pass). Numbering kept for continuity with the 21' arc.
-
[todo]
io/print_floatalways-emit-.0— surface printer always emits.ore/Eso re-lex routes to Float; the runtime printer (printf("%g\n", v)) doesn't, so2.0prints as2(Int-shaped). Asymmetric. Either switch the runtime path to a.0-fallback printer (matching surface) or document the%gcontract in DESIGN.md §"Float semantics" so the LLM-author knowsio/print_float's output is for-humans not round-trip.- context:
docs/specs/2026-05-10-fieldtest-floats.mdfinding F1.
- context:
-
[todo] Rustdoc warning sweep —
cargo doc --no-depsreports 16 pre-existing warnings (15 inailang-check, 1 inailang-core: private-item links from public doc, unresolved intra-crate links). All predate the design-md-consolidation milestone; treat as a one-off sweep.- context: JOURNAL 2026-05-10 ("Audit close: design-md-consolidation").
-
[todo] Architect-iron-law standing-grep extension — the architect agent's drift review should run the four sweep invariant greps on every milestone-close so DESIGN.md cannot silently regrow history anchors / REVERTED narratives / workflow detail / stale cross-references. Path-anchored exceptions (
docs/specs/2026-05-09-*) need an allowlist. Same extension should add the lockstep-checklist the Floats fieldtest exposed: for every new typecheck reject arm on a pattern shape, verify the corresponding desugar pass does not eat that shape first; for every new lowering arm inlower_app, verifyis_static_calleerecognises it. Both shipped silently-broken in the Floats milestone (B1 and the iter-4.2/4.4 pull-forwards) and the architect missed them.- context: JOURNAL 2026-05-10 ("Milestone close: design-md-consolidation"); 2026-05-10 ("Fieldtest close: Floats milestone") — B1 + architect-checklist follow-up.
-
[todo]
design_schema_drift.rsfidelity widening — current test checks anchor presence anywhere in DESIGN.md; the audit found that[high]schema gaps in §"Data model" are invisible because anchors live in Decision 11 instead. Constrain the test to scan only §"Data model" + ParamMode block, or extract JSON-schema blocks into a machine-readable file the test consumes.- context: JOURNAL 2026-05-10 ("Audit close").
P3 — Ideas
- [idea] Latency methodology rework — switch from per-run timing to a histogram-based approach so tail-latency regressions are visible without re-running. Queued from 21'g.
- [idea] Parser-test backfill for 22b.4a-era duplicate-clause
sites (class × 3, class method × 2, instance × 3, instance method
× 1). No regression pin today; only worth it if a 22b.4a-era
diagnostic needs to change.
- context: JOURNAL 2026-05-10 ("Iteration 22-tidy.7")
- [idea]
write_typeType::Forallarm incrates/ailang-prose/src/lib.rssilently drops constraints in inline-type rendering. Dormant — surface forms today only carry forall at fn-signature top level. Fix only if a future feature carries forall + constraints inline.- context: JOURNAL 2026-05-10 ("Iteration 22-tidy.6")
- [idea] Richer integration paths between RC and uniqueness — deferred from the 21' arc; revisit once the uniqueness inference covers more program shapes.