Repository navigation
Closed
Labels
performanceRuntime, compile-time, build-size, or memory performanceRuntime, compile-time, build-size, or memory performance
Description
Summary
The May-2026 release-readiness session landed several non-trivial perf changes that haven't been tested against shapes outside honest_bench + benchmarks/suite + ECS smoke tests. Each has a plausible regression risk we should de-risk before tagging a release.
Recent landings to soak
| Commit | Change | Surface area |
|---|---|---|
56818086 |
GC bytes-trigger bump after gc-suppressed parse | Any workload calling JSON.parse on > 1 MB blobs |
b3e93649 |
Inline ArrayPush fast path for local-bound arrays | Any local-array-push hot loop |
3f5c69a5 |
integer_locals forward-closure pass | Any program with chained int-stable Lets (let x = a*b; let y = x+c; ...) |
4f895dd8 |
Immutable i32-shadow + i32 init path | Touches every const numeric Let — broad blast radius |
cf540b92 |
Buffer-aware stmt_preserves_array_length |
Any for (let i = 0; i < buf.length; i++) shape |
f02541a4 |
FuncRef + Math.* arms in preserves-length walker | Any peephole that runs for (...; i < arr.length; i++) with a body containing function calls or Math methods |
aed21292 |
Static trip-count for-loop unroll | Any tight nested loop with literal bounds and ≤8 iters |
817c4b56 |
>>> 0 correctness fix + channel-vector SIMD reduction |
All workloads (correctness); RGB-style image processing (perf) |
Soak coverage gaps
- Real-world TS apps: the perry test repo has examples like the postgres bench, the issue-tracker repros (fix(fs): wire fs.appendFileSync end-to-end (closes #226) #231, Array.push from inside an async function silently caps at 16 elements when the array is a function parameter #233, fix(jsruntime): #255 re-entrancy — Perry callbacks can read JS object props #259, axios shim: response.status and response.data are undefined on live HTTPS GET #340, feat(harmonyos): Phase 2 v12 — Tabs / Modal / Menu / Grid (v0.5.432) #357, fix(link): GTK4 gstreamer link + perry-hir stale export (#423) #426); these haven't been re-run end-to-end this session.
- CI parity tests (
tests/known_failures.jsonif any): not exercised this session. - Customer-facing workloads: any app that imports user code with patterns we haven't anticipated (TS-typed
: numberaccumulators, large numeric constants, string-heavy hash loops).
What's needed
- Run
cargo test --release --workspace(just landed:d826ace4unblocks the perry crate's 101 tests). Verify all 571 tests pass. - Run the parity test suite (or whichever Node-compat sweep exists) and diff against the pre-session baseline.
- Compile + run a representative set of customer/user TS apps and verify byte-for-byte output match against Bun for at least a 5-minute exercise of each.
- Document any new known-failures in
tests/known_failures.jsonso CI doesn't surprise us.
Acceptance
- All in-tree tests green.
- Parity sweep delta vs pre-session baseline: zero new regressions.
- 3-5 representative real-world apps verified against Bun.
Related
Related correctness issue: #435 (integer_locals overflow class) — soak should specifically check for the 14_closure shape.
Related perf issue: #436 (image_conv 5%-target).
Metadata
Metadata
Assignees
Labels
performanceRuntime, compile-time, build-size, or memory performanceRuntime, compile-time, build-size, or memory performance
Activity
proggeramlug commentedon May 28, 2026
Closing as stale / overtaken by events.
This was a one-time pre-release soak checklist filed 2026-05-04 to de-risk eight perf commits (5681808, b3e9364, 4f895dd, 817c4b5, aed2129, …) before tagging a release. All eight landed that same day and have shipped continuously since — we're now at v0.5.1028, ~24 days and hundreds of releases later. Any regression in the broad-blast-radius changes (i32-shadow,
>>> 0) would have surfaced long ago.Specifically:
known_failures.json, and the tag-gatedparity/compile-smokejobs.No code action warranted; the value (soaking those specific commits before that specific release tag) expired when the release shipped. Ongoing soak now lives in #793/#799/#800.