- the drop tables track bindings only, so six shapes had no owner: a comparison operand (`if parse_expr(s) == nil` abandoned a schedule record and its five containers per cron line), a borrowed call argument (a 1 KB string per MCP request), a container read's copy, a loop's iterable, a projected record, and any of those escaped by a `return` from inside the statement that built them - `c[i]` is the one place expression whose register holds a COPY: no second copy at a boundary (`let u = tokens[0]` copied twice and abandoned the first), and a drop where every other place is left be - never drop an argument register after a CALL — the callee's frame overlaps it; the reap moved into call_window's pre-call stash - a statement-owned temporary is parked in a LOCAL slot: a loop reclaims every temp for its body, and the end-of-statement DROP was releasing the loop counter instead of the record - reader builtins (get/latest/key_at/val_at) keep arg0 alive — their result points into it — but their key argument is ordinary - measured: run 2 112 B -> 64 B, flat 8 s to 20 s; MCP mix 21 312 B / 63 -> 64 B / 1; every handler flat from 2 to 6 requests; the 64 B left is Task 3's argv container - gates: oop-e2e 71/0, woc-test 565/0, wovm-test green, log-watcher 6/0 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| examples | ||
| future-scope | ||
| plan | ||
| runtime | ||
| stories/language-runtime-database | ||
| superpowers | ||
| 00-code-review.md | ||
| 00-principles.md | ||
| 00-status.md | ||
| 01-problem.md | ||
| 02-recovery.md | ||
| 03-data.md | ||
| 04-ui.md | ||
| 05-datalayer.md | ||
| 06-markdown-render.md | ||
| 07-ssl.md | ||
| 08-project-structure.md | ||
| cm.md | ||
| writeonce-pl.md | ||