perf: the next round of build speed (PERFORMANCE 9.6) #144
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
What is next for the front end and the compiler's own build, from PERFORMANCE.md 9.6. This is a tracking issue; the work is split into one PR-sized issue per step.
Steps
List.equalsas a loop (std; ready)Iterate.joinedover the program lines as one sized copy (compiler; ready)List.update(native + seed refresh; blocked on the owner decision below)Not in this round: keeping the parsed
stdbetween runs. It needs a cache location and invalidation rule (public behaviour); revisit after #206 is measured.Acceptance criteria
Measurement
Forge CI only, no local bootstrap: the alternating-run processor times of
mainand PR binary are printed in the CI log (method of PERFORMANCE.md 9.5); the generated C stays byte-identical where a step promises it (tools/agree.sh emit).Dependencies
None between #204-#206; #207 waits for the owner decision.
Notes
Seed impact: only #207 (new native, two-commit rule of
CLAUDE.md"Seed and breaking changes"). The others add no native, syntax or looked-up name.Moved from the planning lists of the docs; the design record stays the specification.
[loop:torbscript] claim refine by session:loop-torbscript-20261008 until 2026-10-08T18:30:00Z
[loop:torbscript] refine: split #144 into #204 (List.equals loop), #205 (sized join of program lines), #206 (parallel parse), all labelled
ready, and #207 (nested write asList.update); #144 is now a tracking issue. Nothing in #204-#206 touches the seed.[loop:torbscript] owner decision: #207 adds a native (
ArrayList.update), a VM member and a lowering that looks upupdate, which is a seed refresh with the two-commit rule.Options:
Recommendation: option 2 until #204-#206 are measured, then decide with numbers; the nested-write cost was already fixed field by field in round one. Measurement in CI needs no local bootstrap for any step, but the seed refresh itself is yours.
next: waiting (owner decision); #204-#206 are
readymeanwhile (next: implement)[loop:torbscript] owner decision recorded (torben via WhatsApp, 2026-10-08 16:35 Europe/Berlin): "Ja mach das, so was brauchst du mich nicht fragen" (yes, do it, no need to ask about such things).
Resolution: option 1, #207 is done in this round with the two-commit seed rule. #207 labelled
ready.Standing guidance from the same answer: "Das meiste davon konntest du selbst beantworten" (most of this you could have answered yourself). Decide performance steps, seed refreshes that follow an existing plan, naming that follows the conventions, and anything measurable on your own; measure before asking; large refactors are fine when they make sense, size is no argument against an option.
[question-closed] q=q1 reason=answered-elsewhere
[loop:torbscript] close: #204, #205, #206 and #207 are closed and merged (PRs #213, #238 and the earlier ones); their before/after rows are in PERFORMANCE.md 9.7 (
List.equals), 9.8 (parallel parse), 9.9 (Iterate.joined), 9.10 and 9.11 (List.update). The numbering moved on since this issue named 9.7 as the single table, each step holds its own row. Closing.