Four tracks at once, written down so none of them starts twice

This commit is contained in:
Joseph Ferano 2026-09-12 04:51:05 +07:00
parent e416f28567
commit 000264bb29

29
NEXT.md
View File

@ -34,6 +34,31 @@ call and come back as *unknown name*, which is the house rule's own class of bug
Read SBCL for what restarts should *mean* and ignore how it moves control: it transfers with `block`/`return-from`, Read SBCL for what restarts should *mean* and ignore how it moves control: it transfers with `block`/`return-from`,
which §6 rules out. which §6 rules out.
### In flight — four tracks, one session, 2026-09-12
Four agents are working these in parallel worktrees. Listed so a session reading this cold does not start one of them again.
1. **`nth` removed, then a `println` builtin.** `nth` was an *asymmetric* alias of `at`: `check.ml` aliased them, but
`parse.ml` and `place_of_expr` matched only `at`, so `(set (nth a i) x)` and `(addr (nth a i))` were refused while
the `at` forms worked. Two names documented as identical that differ on write. Then `println`: `Session.render` is
already the compile-time structural walk plan.org asks for, and lifting it out of the dev path — parameterised on
its emitter — gives a real `println` over concrete types with none of milestone 5 involved. The per-type
`print-f64`/`print-str` family goes.
2. **The break loop's editor half.** `break` on the daemon protocol, `compute-restarts`, `restart-at`, and a
minibuffer prompt. `spec-conditions.md` §2's remaining piece.
3. **The first ten raylib core examples**, plus the window and input bindings they need. The deliverable is the
*language gap list* as much as the ported files — sand.flan is the only real raylib program today, so this is the
first time the language is pushed by code it was not designed around.
4. **Names in DWARF.** The two items under "One line away" below, promoted here because the inspector and the
conditions buffer are only as good as what lldb can say: let-bound locals print as `s0`, `s2` because `Tast` refers
to them by slot index and `Check` drops the names, and `Session.eval` never passes the `~debug` that
`Emit.redefinition` already takes and is already tested for. The second also unblocks source interleaving in the
disassembly buffer.
**DWARF is not missing, and `flan-cnr.el`'s stack pane reads as though it were.** `flan build --debug` emits it and
`flan-dape.el` drives lldb with it. What the break loop lacks is DWARF *in a dev build* — a `flan dev` process is not a
`--debug` one. Worth rewording that refusal so it names the real gap.
### Managed classes are planned. Do not start them. ### Managed classes are planned. Do not start them.
plan.org grew a `class` facility beside `struct`: identity, runtime shape metadata, an implementation-defined plan.org grew a `class` facility beside `struct`: identity, runtime shape metadata, an implementation-defined
@ -540,9 +565,9 @@ Sixty mutations, nineteen left the whole suite green. The severe cluster is clos
- **`match` over enums.** Fully desugarable, wanted, and blocked only by `Ast.pattern` needing a keyword case, which - **`match` over enums.** Fully desugarable, wanted, and blocked only by `Ast.pattern` needing a keyword case, which
`load.ml` matches exhaustively. `load.ml` matches exhaustively.
- **DWARF for a redefinition module.** `Emit.redefinition` takes `~debug` and is tested; `Session.eval` does not pass - **[in flight]** **DWARF for a redefinition module.** `Emit.redefinition` takes `~debug` and is tested; `Session.eval` does not pass
it. That also unblocks source interleaving in the disassembly buffer. it. That also unblocks source interleaving in the disassembly buffer.
- **Let-bound locals print as `s0`, `s2`** under lldb. Parameters get their real names; `Tast` refers to the rest by - **[in flight]** **Let-bound locals print as `s0`, `s2`** under lldb. Parameters get their real names; `Tast` refers to the rest by
slot index and `Check` drops the names. slot index and `Check` drops the names.
- **`Build.executable` returns only `out`**, so the daemon recovers the host `.ll` by recomputing `Build.workdir ()`. - **`Build.executable` returns only `out`**, so the daemon recovers the host `.ll` by recomputing `Build.workdir ()`.