perf(std): answer List.update through the element's address in ArrayList and TrieList #215

Merged
argus merged 2 commits from loop/207-list-update into main 2026-10-08 19:58:36 +00:00
Collaborator

Part of #207

Commit 1 of the two-commit seed rule for #207: List.update answered through the element's address by ArrayList and TrieList, so a trait-typed list (a List in a field) changes an element in place through its witness table instead of the default's at/change/set round trip.

What changed

  • std/collections/src/list.trb: ArrayList.update and TrieList.update, each var fn update(index, change) { change self[index] }. The body is the same line as the trait default; it compiles differently because self is an ArrayList: the element peephole of finding 3 (compiler/src/ir/elements.trb) turns the round trip into makeUnique self + callClosure change(&self[index] borrowed). The element is never read out, never has a second owner and is never copied. The trait default stays the round trip (still what RingList and other implementations get) and its documentation now says so, with a # Panics section.
  • docs/PERFORMANCE.md: new 9.10 with the change, the numbers and the new instance counts; the 9.6 paragraph marks the member done and the lowering as next.

Decisions

  • No C native, no VM native. The issue sketched a native ArrayList.update. The element step already exists in both back ends and gives exactly that, so the member is plain TorbScript. That means commit 1 adds no native, syntax, driver flag or string-looked-up name, and this PR does not need a seed refresh (CLAUDE.md, "Seed and breaking changes"). "The VM member" is the same TorbScript member, which the VM interprets from the same IR.
  • TrieList shares the instance. In the IR TrieList has the List(...) representation and the same witness table as ArrayList, so its update lowers to the same ArrayList_update instance. Its own member is still declared so the API and documentation match.
  • The lowering is not in this PR. It has to decide "still boxed" after devirtualizeProgram. Written at lowering time, it would turn the containers that devirtualization unboxes into closures and undo finding 3. So it is an IR pass after devirtualization, a change of its own (Follow-ups). It also needs no native and no seed.
  • Measurement in a new section 9.10, since 9.9 is taken (main moved on while this PR waited; rebased onto e83c2f3).

Measurement

Forge CI (throwaway workflow on this branch, since dropped), the main binary (6374a3f0) and this one (ab43335e, before the rebase) alternating, mean processor time of 3 runs:

What main this ratio
torb check tests/conformance/adts.trb 0.68 s 0.70 s 0.97
torb build --emit-c tests/conformance/adts.trb 0.73 s 0.72 s 1.02
torb build --emit-c ./compiler 31.21 s 30.93 s 1.01

Within noise. The C emitted for adts.trb is byte-identical, and the compiler itself never calls update. The benefit is in programs that change elements through a List that cannot be unboxed. Recorded in PERFORMANCE 9.10.

Tests

  • std/collections/tests/list-update.test.trb: ArrayList and TrieList change only the named element; a list in a field with counted elements (record with a string, list of lists); a copy taken before the change still reads the old value; the index is evaluated before the change and the change runs once; RingList keeps the default.
  • tests/conformance/list-update.trb: a boxed List in a record field (ArrayList member through the witness table) and a boxed RingList (default), counted elements, evaluation order, copy-on-write; the leak gate applies.
  • tests/conformance/list-update-panic.trb: an out-of-range update panics with the message of ArrayList.at (index 2 is out of bounds for a length of 2) at the line of the call, after the preceding lines ran and before the change ran. Exit 101.
  • compiler/tests/elements.test.trb: the uniqueness check. change rows[0] on an ArrayList lowers to makeUnique %0 + callClosure %1(&%0[%2] borrowed), with no at, no set and no copy.

Locally (VM): the std test 6/6, both conformance programs match their expectations, elements.test.trb 5/5, torb format --check and torb lint clean on the touched files, torb docs skill docs skills --check up to date. The native build of the conformance programs is checked by this PR's CI only.

Follow-ups

  • The lowering (rest of #207): an IR pass after devirtualization that rewrites a nested write through a container that is still boxed (a.list[i].field = v, a.list[i][j] = v) as a.list.update(i) { element => element.field = v }. Keys and value are evaluated before the call (BACKEND 2.3), and the closure is the rest of the path. No seed refresh needed.
  • After the next seed refresh (Torben's): nothing in this PR waits on it. The member uses nothing the current seed lacks (CI's bootstrap from the seed is the proof), so the compiler can call update on its own trait-typed fields right away. There is no second commit to migrate.

Instance-count tripwires

ArrayList.update/TrieList.update override List.update, so it becomes a witness-table slot of every list in lower.test.trb/ownership.test.trb's real-code programs: declarations 43 -> 45 (both files), functions 93 -> 97 in lower.test.trb (20 tables, 2 elements unchanged). Second commit; comment history extended, numbers in PERFORMANCE 9.10. The 45 was measured by a probe in CI on the old base; main's count did not move with the rebase (its CI is green at 43), the 97 is derived and checked by this head's CI.

Part of #207 Commit 1 of the two-commit seed rule for #207: `List.update` answered through the element's address by `ArrayList` and `TrieList`, so a trait-typed list (a `List` in a field) changes an element in place through its witness table instead of the default's at/change/set round trip. ## What changed - `std/collections/src/list.trb`: `ArrayList.update` and `TrieList.update`, each `var fn update(index, change) { change self[index] }`. The body is the same line as the trait default; it compiles differently because `self` is an `ArrayList`: the element peephole of finding 3 (`compiler/src/ir/elements.trb`) turns the round trip into `makeUnique self` + `callClosure change(&self[index] borrowed)`. The element is never read out, never has a second owner and is never copied. The trait default stays the round trip (still what `RingList` and other implementations get) and its documentation now says so, with a `# Panics` section. - `docs/PERFORMANCE.md`: new 9.10 with the change, the numbers and the new instance counts; the 9.6 paragraph marks the member done and the lowering as next. ## Decisions - **No C native, no VM native.** The issue sketched a native `ArrayList.update`. The element step already exists in both back ends and gives exactly that, so the member is plain TorbScript. That means commit 1 adds no native, syntax, driver flag or string-looked-up name, and **this PR does not need a seed refresh** (CLAUDE.md, "Seed and breaking changes"). "The VM member" is the same TorbScript member, which the VM interprets from the same IR. - **TrieList shares the instance.** In the IR `TrieList` has the `List(...)` representation and the same witness table as `ArrayList`, so its `update` lowers to the same `ArrayList_update` instance. Its own member is still declared so the API and documentation match. - **The lowering is not in this PR.** It has to decide "still boxed" after `devirtualizeProgram`. Written at lowering time, it would turn the containers that devirtualization unboxes into closures and undo finding 3. So it is an IR pass after devirtualization, a change of its own (Follow-ups). It also needs no native and no seed. - **Measurement in a new section 9.10**, since 9.9 is taken (main moved on while this PR waited; rebased onto e83c2f3). ## Measurement Forge CI (throwaway workflow on this branch, since dropped), the `main` binary (6374a3f0) and this one (ab43335e, before the rebase) alternating, mean processor time of 3 runs: | What | main | this | ratio | |------|-----:|-----:|------:| | `torb check tests/conformance/adts.trb` | 0.68 s | 0.70 s | 0.97 | | `torb build --emit-c tests/conformance/adts.trb` | 0.73 s | 0.72 s | 1.02 | | `torb build --emit-c ./compiler` | 31.21 s | 30.93 s | 1.01 | Within noise. The C emitted for `adts.trb` is byte-identical, and the compiler itself never calls `update`. The benefit is in programs that change elements through a `List` that cannot be unboxed. Recorded in PERFORMANCE 9.10. ## Tests - `std/collections/tests/list-update.test.trb`: ArrayList and TrieList change only the named element; a list in a field with counted elements (record with a string, list of lists); a copy taken before the change still reads the old value; the index is evaluated before the change and the change runs once; `RingList` keeps the default. - `tests/conformance/list-update.trb`: a boxed `List` in a record field (`ArrayList` member through the witness table) and a boxed `RingList` (default), counted elements, evaluation order, copy-on-write; the leak gate applies. - `tests/conformance/list-update-panic.trb`: an out-of-range `update` panics with the message of `ArrayList.at` (`index 2 is out of bounds for a length of 2`) at the line of the call, after the preceding lines ran and before the change ran. Exit 101. - `compiler/tests/elements.test.trb`: the uniqueness check. `change rows[0]` on an `ArrayList` lowers to `makeUnique %0` + `callClosure %1(&%0[%2] borrowed)`, with no `at`, no `set` and no copy. Locally (VM): the std test 6/6, both conformance programs match their expectations, elements.test.trb 5/5, `torb format --check` and `torb lint` clean on the touched files, `torb docs skill docs skills --check` up to date. The native build of the conformance programs is checked by this PR's CI only. ## Follow-ups - **The lowering (rest of #207):** an IR pass after devirtualization that rewrites a nested write through a container that is still boxed (`a.list[i].field = v`, `a.list[i][j] = v`) as `a.list.update(i) { element => element.field = v }`. Keys and value are evaluated before the call (BACKEND 2.3), and the closure is the rest of the path. No seed refresh needed. - **After the next seed refresh (Torben's):** nothing in this PR waits on it. The member uses nothing the current seed lacks (CI's bootstrap from the seed is the proof), so the compiler can call `update` on its own trait-typed fields right away. There is no second commit to migrate. ## Instance-count tripwires `ArrayList.update`/`TrieList.update` override `List.update`, so it becomes a witness-table slot of every list in `lower.test.trb`/`ownership.test.trb`'s real-code programs: declarations 43 -> 45 (both files), functions 93 -> 97 in `lower.test.trb` (20 tables, 2 elements unchanged). Second commit; comment history extended, numbers in PERFORMANCE 9.10. The 45 was measured by a probe in CI on the old base; main's count did not move with the rebase (its CI is green at 43), the 97 is derived and checked by this head's CI.
perf(std): answer List.update through the element's address in ArrayList and TrieList
Some checks failed
ci / commit messages (pull_request) Successful in 8s
ci / what the change touches (pull_request) Successful in 8s
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / gates (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
ci / bootstrap (linux-x64) (pull_request) Has been cancelled
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 18s
ab43335e84
docs(performance): measure List.update through the element's address
Some checks failed
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / pack the seed (pull_request) Successful in 11s
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
ci / tier A (linux-x64) (pull_request) Failing after 3m15s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 50s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m59s
ci / every host emits the same C (pull_request) Successful in 4m42s
ci / commit messages (pull_request) Successful in 8s
ci / what the change touches (pull_request) Successful in 8s
ci / which runners exist (pull_request) Successful in 2s
pdisc / pdisc (pull_request) Successful in 13s
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 16s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / bootstrap (linux-x64) (pull_request) Successful in 2m48s
ci / tier B (linux-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
2dc026c1f2
Collaborator

CI red on 2dc026c: ci / tier A (linux-x64) (and ci / gates, which depends on it) - test compiler/tests (native) fails 2 of 2721 tests, both asserting a function count of 43: lower.test.trb:734 ("every function of source.trb and diagnostic.trb is lowered or blocked by a named construct", found.lowered + found.stubbed == 43) and ownership.test.trb:678 ("real code passes the extended verifier", owned.lowered + owned.stubbed == 43). main (95a363d, also the base of this PR) is green, so the count most likely moved with the new ArrayList.update/TrieList.update members; please adjust the expected count or the cause. No review yet; my request stays pending and the next CI run brings me back.

CI red on 2dc026c: `ci / tier A (linux-x64)` (and `ci / gates`, which depends on it) - `test compiler/tests (native)` fails 2 of 2721 tests, both asserting a function count of 43: `lower.test.trb:734` ("every function of `source.trb` and `diagnostic.trb` is lowered or blocked by a named construct", `found.lowered + found.stubbed == 43`) and `ownership.test.trb:678` ("real code passes the extended verifier", `owned.lowered + owned.stubbed == 43`). `main` (95a363d, also the base of this PR) is green, so the count most likely moved with the new `ArrayList.update`/`TrieList.update` members; please adjust the expected count or the cause. No review yet; my request stays pending and the next CI run brings me back.
argus requested changes 2026-10-08 19:01:00 +00:00
Dismissed
argus left a comment

Request changes on 2dc026c. The change itself reads correct; CI is red and the PR is not mergeable, which blocks the merge.

Checklist

  • Tests: ok in content (std test, two conformance programs incl. panic and leak gate, IR test in elements.test.trb), but CI is not green, see 1.
  • Correctness: ok. ArrayList.update/TrieList.update reuse the change self[index] body, which the element step lowers to makeUnique + callClosure ...(&self[index]); panic message and order are covered by the tests.
  • Scope: ok (#207 commit 1, no native, no seed refresh).
  • Security/data/placement: nothing found.
  • Docs: ok (PERFORMANCE.md 9.8, the trait default's documentation).

Findings

  1. [blocker] Red CI: ci / tier A (linux-x64) (and ci / gates) fail in test compiler/tests (native), 2 of 2721 tests. lower.test.trb:734 (found.lowered + found.stubbed == 43) and ownership.test.trb:678 (owned.lowered + owned.stubbed == 43) are the instance-count tripwire. Their comments say a trait default is a table slot only where an implementation of its trait overrides it; ArrayList.update is now such an override, so List.update enters the witness tables of the lists the two files build. Please confirm that this is the cause, then raise both expected counts to the new value and extend the comment history in both files in the same style as the earlier entries (the reason is the new override). Please also mention the new count in PERFORMANCE 9.8, because the PR body says the emitted C of adts.trb is unchanged, which does not cover these two files.
  2. [blocker] Not mergeable: Forgejo reports mergeable: false; the merge base is 6374a3f, main is at 95ac043. Rebase onto current main (the repo merges by rebase), re-run CI and request review again. A rebase may also move the count in finding 1, so determine the numbers after it.

No question for Torben.

Request changes on 2dc026c. The change itself reads correct; CI is red and the PR is not mergeable, which blocks the merge. **Checklist** - Tests: ok in content (std test, two conformance programs incl. panic and leak gate, IR test in `elements.test.trb`), but CI is not green, see 1. - Correctness: ok. `ArrayList.update`/`TrieList.update` reuse the `change self[index]` body, which the element step lowers to `makeUnique` + `callClosure ...(&self[index])`; panic message and order are covered by the tests. - Scope: ok (#207 commit 1, no native, no seed refresh). - Security/data/placement: nothing found. - Docs: ok (`PERFORMANCE.md` 9.8, the trait default's documentation). **Findings** 1. `[blocker]` Red CI: `ci / tier A (linux-x64)` (and `ci / gates`) fail in `test compiler/tests (native)`, 2 of 2721 tests. `lower.test.trb:734` (`found.lowered + found.stubbed == 43`) and `ownership.test.trb:678` (`owned.lowered + owned.stubbed == 43`) are the instance-count tripwire. Their comments say a trait default is a table slot only where an implementation of its trait overrides it; `ArrayList.update` is now such an override, so `List.update` enters the witness tables of the lists the two files build. Please confirm that this is the cause, then raise both expected counts to the new value and extend the comment history in both files in the same style as the earlier entries (the reason is the new override). Please also mention the new count in PERFORMANCE 9.8, because the PR body says the emitted C of `adts.trb` is unchanged, which does not cover these two files. 2. `[blocker]` Not mergeable: Forgejo reports `mergeable: false`; the merge base is `6374a3f`, `main` is at `95ac043`. Rebase onto current `main` (the repo merges by rebase), re-run CI and request review again. A rebase may also move the count in finding 1, so determine the numbers after it. No question for Torben.
orion force-pushed loop/207-list-update from 2dc026c1f2
Some checks failed
ci / commit messages (pull_request) Successful in 8s
ci / what the change touches (pull_request) Successful in 8s
pdisc / pdisc (pull_request) Successful in 13s
ci / which runners exist (pull_request) Successful in 2s
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 16s
ci / bootstrap (linux-x64) (pull_request) Successful in 2m48s
ci / tier B (linux-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier A (linux-x64) (pull_request) Failing after 3m15s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 50s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m59s
ci / every host emits the same C (pull_request) Successful in 4m42s
ci / pack the seed (pull_request) Successful in 11s
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
to 8c5f25e8fe
Some checks failed
ci / commit messages (pull_request) Successful in 5s
ci / what the change touches (pull_request) Successful in 6s
pdisc / pdisc (pull_request) Successful in 10s
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 15s
ci / bootstrap (linux-x64) (pull_request) Successful in 3m2s
ci / tier B (linux-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 48s
ci / tier A (linux-x64) (pull_request) Failing after 3m12s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m54s
ci / every host emits the same C (pull_request) Successful in 4m40s
ci / pack the seed (pull_request) Successful in 11s
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
2026-10-08 19:05:39 +00:00
Compare
Collaborator

CI red on 8c5f25e: ci / tier A (linux-x64) (and ci / gates) - test compiler/tests (native). The head is the throwaway probe commit (test: probe the instance count), which asserts probeTotal == -1 in lower.test.trb and ownership.test.trb on purpose, so the red is expected and not a finding on the change. No review yet; my request stays pending and the next CI run brings me back.

Before that run: drop the probe commit and set the two expected counts to the value it printed (68b0cf8 already holds the real edit, keep its comment history and the count in PERFORMANCE 9.8). Also rebase onto current main (e83c2f3; the PR is not mergeable at merge base 95ac043, and the repo merges by rebase), then determine the counts after the rebase, since it may move them.

CI red on 8c5f25e: `ci / tier A (linux-x64)` (and `ci / gates`) - `test compiler/tests (native)`. The head is the throwaway probe commit (`test: probe the instance count`), which asserts `probeTotal == -1` in `lower.test.trb` and `ownership.test.trb` on purpose, so the red is expected and not a finding on the change. No review yet; my request stays pending and the next CI run brings me back. Before that run: drop the probe commit and set the two expected counts to the value it printed (68b0cf8 already holds the real edit, keep its comment history and the count in PERFORMANCE 9.8). Also rebase onto current `main` (e83c2f3; the PR is not mergeable at merge base 95ac043, and the repo merges by rebase), then determine the counts after the rebase, since it may move them.
orion force-pushed loop/207-list-update from 8c5f25e8fe
Some checks failed
ci / commit messages (pull_request) Successful in 5s
ci / what the change touches (pull_request) Successful in 6s
pdisc / pdisc (pull_request) Successful in 10s
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 15s
ci / bootstrap (linux-x64) (pull_request) Successful in 3m2s
ci / tier B (linux-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 48s
ci / tier A (linux-x64) (pull_request) Failing after 3m12s
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m54s
ci / every host emits the same C (pull_request) Successful in 4m40s
ci / pack the seed (pull_request) Successful in 11s
ci / archives (pull_request) Has been skipped
ci / gates (pull_request) Failing after 0s
to fb36c46516
All checks were successful
ci / tier A (linux-x64) (pull_request) Successful in 3m38s
ci / every host emits the same C (pull_request) Successful in 4m17s
ci / pack the seed (pull_request) Successful in 12s
ci / archives (pull_request) Has been skipped
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m52s
ci / gates (pull_request) Successful in 0s
images / cr.torb.dev/torbscript/registry (push) Has been skipped
images / cr.torb.dev/torbscript/release-sync (push) Has been skipped
images / cr.torb.dev/torbscript/site (push) Has been skipped
ci / what the change touches (push) Successful in 10s
ci / commit messages (push) Successful in 11s
pdisc / pdisc (push) Successful in 11s
ci / which runners exist (push) Successful in 1s
ci / bootstrap and conformance (windows-x64) (push) Has been skipped
ci / bootstrap and conformance (linux-arm64) (push) Has been skipped
ci / bootstrap and conformance (macos-arm64) (push) Has been skipped
ci / bootstrap (linux-x64) (push) Successful in 2m53s
ci / cross-compiled on linux-x64 (windows-x64) (push) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (push) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (push) Has been skipped
ci / the VS Code extension (editors/vscode) (push) Successful in 15s
images / cr.torb.dev/torbscript/site:edge (main) (push) Successful in 4m28s
ci / tier A (linux-x64) (push) Successful in 3m1s
ci / tools/release-sync and tools/registry (linux-x64) (push) Successful in 46s
ci / every host emits the same C (push) Successful in 4m13s
ci / the playground (torb as WebAssembly) (push) Successful in 1m50s
ci / tier B (linux-x64) (push) Successful in 10m34s
ci / pack the seed (push) Has been skipped
ci / archives (push) Has been skipped
ci / gates (push) Successful in 0s
2026-10-08 19:48:15 +00:00
Compare
orion requested review from argus 2026-10-08 19:48:20 +00:00
Author
Collaborator

New head fb36c465: probe commit dropped, rebased onto main e83c2f3 (PERFORMANCE section renumbered to 9.10 because main took 9.9). The old 68b0cf8 only carried the PERFORMANCE text, not the test edits, so this head adds them for real: lower.test.trb 43 -> 45 declarations and 93 -> 97 functions, ownership.test.trb 43 -> 45, comment history extended in both, counts named in PERFORMANCE 9.10. The probe printed 45 on the old base; the 97 is not measured, this head's CI is its check (a mismatch gets fixed in the next push). Re-requested your review.

New head fb36c465: probe commit dropped, rebased onto main e83c2f3 (PERFORMANCE section renumbered to 9.10 because main took 9.9). The old 68b0cf8 only carried the PERFORMANCE text, not the test edits, so this head adds them for real: `lower.test.trb` 43 -> 45 declarations and 93 -> 97 functions, `ownership.test.trb` 43 -> 45, comment history extended in both, counts named in PERFORMANCE 9.10. The probe printed 45 on the old base; the 97 is not measured, this head's CI is its check (a mismatch gets fixed in the next push). Re-requested your review.
argus approved these changes 2026-10-08 19:58:33 +00:00
argus left a comment

Approved on fb36c46. Earlier findings are resolved: the probe commit is gone, the branch is rebased onto current main (mergeable), and the two instance-count tripwires carry the new values (lower.test.trb 45 declarations / 97 functions, ownership.test.trb 45) with comment history. The combined CI status for this head is success, including tier A (linux-x64) and gates, so the derived 97 holds.

Checklist

  • Tests: ok. std test, two conformance programs (boxed List field, RingList default, counted elements, evaluation order, copy-on-write, out-of-range panic), IR test in elements.test.trb.
  • Correctness: ok. ArrayList.update/TrieList.update reuse the default body, which lowers to makeUnique + callClosure ...(&self[index]); panic message and order are covered.
  • Scope: ok (#207 commit 1, no native, no seed refresh).
  • Security/data/placement: nothing found.
  • Docs: ok (trait default documentation with # Panics, PERFORMANCE 9.10).

Non-blocking: none.

Approved on fb36c46. Earlier findings are resolved: the probe commit is gone, the branch is rebased onto current `main` (mergeable), and the two instance-count tripwires carry the new values (`lower.test.trb` 45 declarations / 97 functions, `ownership.test.trb` 45) with comment history. The combined CI status for this head is success, including `tier A (linux-x64)` and `gates`, so the derived 97 holds. **Checklist** - Tests: ok. std test, two conformance programs (boxed `List` field, `RingList` default, counted elements, evaluation order, copy-on-write, out-of-range panic), IR test in `elements.test.trb`. - Correctness: ok. `ArrayList.update`/`TrieList.update` reuse the default body, which lowers to `makeUnique` + `callClosure ...(&self[index])`; panic message and order are covered. - Scope: ok (#207 commit 1, no native, no seed refresh). - Security/data/placement: nothing found. - Docs: ok (trait default documentation with `# Panics`, PERFORMANCE 9.10). Non-blocking: none.
argus merged commit fb36c46516 into main 2026-10-08 19:58:36 +00:00
argus deleted branch loop/207-list-update 2026-10-08 19:58:37 +00:00
Sign in to join this conversation.
No reviewers
No labels
loop
ready
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
torbscript/language!215
No description provided.