Rust Compiler Wall Time Fell 4.57% Since July While 74 Benchmarks Got Slower
Software / news
Rust Compiler Wall Time Fell 4.57% Since July While 74 Benchmarks Got Slower
Nicholas Nethercote's monthly report credits LLVM 23, Clippy profile-guided builds and a rustdoc rewrite, and shows the new trait solver and borrow checker costing time on some crates.

The Rust compiler got 4.57 percent faster on average between July 29 and Sept. 28, and 74 of 629 benchmark measurements went the other way, contributor Nicholas Nethercote reported Sept. 30. He described the results chart as "a sea of green", with 555 measurements improving and several showing double-digit cuts.
The figures come from the compiler's public benchmark suite at perf.rust-lang.org, which Nethercote cited for the commit range. He also wrote that he starts work at Hexcat on the compiler performance project goal on Oct. 1, the day after the post.

The rustdoc fix that took four pull requests
The biggest single-tool gain is outside the compiler proper. Noah Lev Bartell-Mangel wrote on Aug. 27 that rustdoc, the documentation generator, got a 33 percent speedup, which he put at 25 percent less wall time, from four merged pull requests in one week.
It started with a release-team report: rustdoc failed on the indented-blocks crate under #![recursion_limit = "8"] while analysing core::fmt::num_buffer::NumBufferTrait. The fix that mattered most was a reordering. Lev's PR #159623 filters first and only then calls build_impl, which cut average wall time by 20 percent and peak memory by 12 percent.
- #159623 filter before build_impl20 %
- #159854 inspect only the head of self types18 %
- #159721 inline primitive impls locally only12 %
- #159779 filter synthetic impls6 %
Source: Noah Lev Bartell-Mangel, 'Making rustdoc faster', Aug. 27, 2026
Those are per-change averages measured separately, so they do not add up to 25 percent. Lev said hyper and bitmaps improved by up to 40 percent and a hello-world microbenchmark by up to 60 percent. He said the changes are on nightly and scheduled for stable in Rust 1.99.
The two new engines that cost compile time
Two larger pieces of compiler work slowed some builds. The Polonius Alpha borrow checker, a more precise check that does more work, reached nightly on Aug. 4. The new trait solver, which Nethercote nicknames Pineapple Häagen-Dazs, followed on Aug. 21.
Jana Dönszelmann published performance data on the solver on Aug. 7. Of 1,000 crates sampled from 20,000, more than 900 landed within 0.8 to 1.2 times the old solver's speed. The worst case, unic-ucd-name, went from 214 times slower to 1.07 times slower. astrology-3.0.3 went from 4.1 times slower to 20 percent faster.
Jack Huey's PR #161938 made liveness computation lazy in Polonius Alpha, cutting instruction counts on the popular serde crate by 3 to 5 percent. Nethercote said most other benchmarks moved by under 1 percent.
What the compiler's own maintainers changed
Nethercote's post lists dozens of pull requests. Five show the range.
| PR | Author | Change | Reported effect |
|---|---|---|---|
| #159642 | Jakub Beránek | Profile-guided optimisation for Clippy | Up to 18% wall time |
| #158734 | Nikita Popov | LLVM 23 | 1.2% mean wall time |
| #160193 | Nicholas Nethercote | New traversal for dataflow analyses | About 30% on a check build |
| #160535 | Chris Denton | Larger default compiler stack | Almost 3% instructions |
| #161938 | Jack Huey | Lazy liveness in Polonius Alpha | 3% to 5% on serde |
The 30 percent check-build gain is on cranelift-codegen, which contains a function with more than 18,000 basic blocks. Nethercote's traversal change cut calls to apply_effects_in_block from 1.5 million to 90,000 for one analysis.
Other toolchains chase the same gain: Zig 0.17.0 shipped incremental builds on Linux in the same week and broke its language server. Denton's larger stack let the team remove the ensure_sufficient_stack workaround, and the compiler still recurses on a very deep expression.
Every figure here comes from the project's own harness, the same kind of self-published measurement as turbopuffer's v3 benchmark. Nethercote added that he used LLM analysis help on several of the pull requests while following the Rust project's policy that all code and text be written by humans.
What to watch before 1.99
If your workflow is cargo check on a large workspace, the dataflow change is the one to look for in your own timings, since it targets the check path rather than codegen. Rust 1.99 is the first stable release Lev named for the rustdoc changes. Nethercote's next monthly post, covering October, is the next place the numbers get updated.
Sources
More in Software
- 01Fyra Labs Says Tov's Faster-Than-Rust Benchmarks Compare Against Slowed RustTov's own README table now shows Rust ahead on four of 12 tests, and a rival's rewrite of the Rust code erased the dispatch and hash-map leads.
- 02Roc's Pure-Functional DEFLATE Lands 2.6 to 8.9 Percent Behind C's libdeflateRichard Feldman's own 144-benchmark run on two machines found a worst case of about 18 percent slower and a best case of just over 18 percent faster, before Roc has a numbered release.
- 03Google's Privacy Policy Now Lets Opted-In Gmail Data Reach Ad ServicesThe Oct. 16 revision keeps the promise of no ads from Gmail content but adds an exception for anyone who connects the inbox to Search through Personal Intelligence.
- 04UUIDv7 Guarantees Uniqueness and Little Else, and Python 3.14's Generator Kept Running Ahead of a Reset ClockRobert Alexander's Oct. 19 post sets RFC 9562's own wording against the ordering, timestamp and unguessability assumptions developers make.