Skip to content

Engine plan tracker — GC correctness and performance (routing only; docs/engine-plan.md is authoritative) #7294

Description

@proggeramlug

Hub for the engine effort — correctness and performance.

The plan is docs/engine-plan.md. This issue deliberately holds no content of its own: it links and routes, nothing more.

That constraint is the point. Every hand-maintained duplicate this project hit recently had silently rotted — gc_repsel_matrix.sh's header asserting copy-minor 12/22 when the true figure was 0/49 (#7255), a known_failures.json entry absent from the gap_snapshot.json the gate actually reads (#797), a README performance table with no generated markers. A tracker that restates the plan becomes the next one. If something here contradicts the doc, the doc is right and this is stale.


Part 1 — GC correctness

Shape: a GC-managed pointer exists somewhere the collector does not know about, across a point where the collector can run. Three homes, three mechanisms. Order is 0 → 2; layers 1 and 3 are independent and startable now.

Layer Scope Issues
0 in-process LLVM — the enabler #7241
1 codegen lowering discipline #7615 (campaign map), rfc-rooting-by-construction.md
2 emitted-code liveness (statepoints) #7108, #7174
3 runtime Rust handles #7231, #7254

Open instances (layer 2, subsumable — fix the instance, do not build new mechanism): #7246, #7247, #7248, #7251
Blocking bug: #7280 · Collector mode / RSS: #7056, #7161

Part 2 — Performance

Item Issue
Array index range proof — measured 10.7× on matrix_multiply #7286
method_calls is guard-bound, not call-bound #7287
Build non-determinism (78 ms vs 3450 ms by file location) #7288
Sound i64 specialization replacement #7244
Write-barrier Phase B #7187

Gates and instruments

#7282 (freshness fingerprint too broad) · #7272 (addr-class misses perry-ext-*) · #7255 (matrix arm liveness) · #7245 (native_proof_regressions unwatched) · #7261 (strip-dir leak) · #797 (skip-list provenance)


Two rules carried from recent experience

  1. A green run that performed zero copying minors proves nothing (gc-matrix: four of the six PR-gating arms run ZERO copying minors corpus-wide (default/verify_evac/cons_scan_off at copy-minor 0/49; header still claims 12/22) #7255). Assert copied_objects > 0.
  2. PERRY_GC_MOVING_LOOP_POLLS=1 at run time on a default-compiled binary is clean 10/10 and proves nothing (GC: #7154's residual is NOT fixed — the loop-polls config is red 0/30, and stock zod alone fails 5/40 #7280) — the poll codegen is not in the binary. Compile-time and run-time env must both be set. This is how an honest 30/30 gets reported on a broken build.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions