Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

GC pacing: a minor at tsc.ts's transpile peak promotes ~31 MB via remembered_set/array (±0.6% instr, +27 MB phase lottery)

Open
#12,357 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
rust, typescript

Research direction

Start by reading bench/tsc.ts and the GC diagnostic logs e-base.err and e-head.err referenced in the report, then compare the supplied pad sweeps. The issue asks why a minor collection at the transpile peak promotes heavily through remembered_set/array and whether pacing should account for transient peaks. Done means identifying the cause and establishing whether a pacing change is warranted; no fix or test location is specified.

Written by the indexing model from the issue text.

Description

Found while measuring the replace PR. bench/tsc.ts runs 50 transpileModule calls over a 2000-line source, and its cost depends on where minor collections land in the transpile cycle, which holds about 14 MB live.

A tiny change in allocation (about 4 KB less by trigger 2) moves one minor onto the transpile peak. That minor promotes 30.9 MB, 13.9 MB of it through remembered_set/array. The comparable minor in the other phase promotes 5.0 MB. The result is +1.2G instructions of gc::copying plus old-gen work, the arena at 132 MB instead of 113 MB, peak anon RSS +27 MB, and one extra minor.

A garbage pad before the loop flips the sign. With identical code, either arm swings by ±0.6% instructions.

Questions for the GC owners (extslot/zproot):

  • Why does a minor at the peak promote that much through the remembered set?
  • Should pacing, for example survivor-ratio feedback, avoid triggering at a transient peak?

Data, pad sweeps and GC diagnostic logs are on qb6 in /root/claude-lanes/rxtsc (sweep.sh, sweep2.sh, e-{base,head}.err).

Dominant language
Rust
Stars
4.9k
Forks
166
Avg merge
2h 20m
Merged PRs (30d)
916

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PerryTS/perry

All issues in PerryTS/perry

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.