概要
- Rustコンパイラのパフォーマンスが過去2ヶ月で大幅に向上
- 多数のベンチマークで「sea of green」と呼ばれる好結果
- rustdoc、Clippy、LLVM、Polonius Alphaなど各所で最適化
- 新しいトレイトソルバーやデータフロー解析でも改善
- Hexcatでの新しいプロジェクト開始予定
Rustコンパイラのパフォーマンス進捗
- 期間2026-07-29から2026-09-28の平均ウォールタイム4.57%削減
- 629件のベンチマーク中555件が改善、74件のみが悪化
- 二桁%の改善を記録したベンチマークも複数
- 技術用語で「 sea of green」と呼ばれる好結果
rustdocの高速化
- Noah Levによる大幅な rustdoc のスピードアップ
- 詳細な手法は本人の投稿で解説
- 読み応えと満足感のある内容
Clippyの最適化
- Jakub Beránekが Clippy でPGOを有効化(PR #159642)
- ほとんどのClippyベンチマークでウォールタイム改善
- 最大18%の高速化を達成
LLVMのバージョンアップ
- Nikita Popovがコンパイラの LLVM をバージョン23にアップグレード(PR #158734)
- 全ベンチマーク平均で1.2%のウォールタイム短縮
- 単一PRとしては非常に優秀な成果
新しいボローチェッカー Polonius Alpha
- Nightlyで Polonius Alpha (新ボローチェッカー)を有効化
- 旧ボローチェッカーよりも精度向上
- 一部ケースでコンパイル時間増加も、Jack Hueyの最適化で軽減
- PR #161938: liveness計算のlazy化でserdeなどの命令数3-5%削減
- PR #163027: データ構造調整とインライン化で複数ベンチマークで微小改善
- 全体の改善が多く、Polonius Alphaの悪化も相殺
新トレイトソルバー Pineapple Häagen-Dazs
- Nightlyで新トレイトソルバー Pineapple Häagen-Dazs を有効化
- 一部ケースで速度低下も、Jana Dönszelmann等による継続的な改善
- 著者自身も複数のPRで大幅な高速化を実現
- 例: 特定crateで50%、25%、15%、さらに高い改善
xmakroによる最適化
- 新規貢献者 xmakro による一連のパフォーマンス改善
- PR #157281: specialization graph構築時のimpl処理最適化で1.58%短縮
- PR #158059: インクリメンタルコンパイルデータ読み込みの最適化で最大6%短縮
- PR #160473: obligations処理経路のアロケーション削減で最大2%短縮
- PR #160268: trait solver選択のstatic dispatch化で複数ベンチマーク微小改善
データフロー解析の改善
- PR #160193: データフロー解析のCFG走査アルゴリズムを変更
- cranelift-codegen crateで~30%のウォールタイム削減
- PR #160033: EverInitializedPlacesの無駄なデータ追跡を排除し、match-stressベンチマークで17%の命令数削減
LLM(大規模言語モデル)の活用
- 一部PRで LLM による分析支援を活用
- コード・テキストは原則自作、プロジェクト方針に従う
その他の改善
- PR #160535: Chris Dentonがデフォルトスタックサイズ拡大、手動スタック拡張の削除で最大3%命令数削減
- PR #160506, #162859: 複数パフォーマンス改善PRをまとめてロールアップ、効率的なマージ運用
- PR #162747: ASTからHIRへの変換コードのクリーンアップで最大1.5%命令数削減
新しい職務と感謝
- 明日より Hexcat でコンパイラパフォーマンス最適化プロジェクト始動予定
- Mara Bos、Predrag Gruevski他関係者への謝意
編集後記
- 新トレイトソルバー名「Penelope Hammertime」は冗談、本当の名前は「 Pineapple Häagen-Dazs」
そもそも、コンパイラが遅いのはなんでなんだろう?俺はRustの知識が全然ないんだけど、遅いってどのくらい遅いの?Cのコンパイラと比べてどうなの?パフォーマンスの悪化の原因は何?