
2026/10/01 21:44
2026 年 9 月の Rust コンパイラ高速化の仕方
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
2026年7月から9月にかけて、Rustは大きなパフォーマンスのマイルストーンを達成しました:629件のベンチマーク全体で、ウォールクロック時間の平均4.57%削減を果たし、そのうち555件の改善とわずか74件の後退です。この進歩は、LLVMをバージョン23にアップグレードしたことで1.2%の平均改善を達成し、ClippyでProfile-Guided Optimizationを有効化したことで多くのケースで最大約18%のパフォーマンス向上をもたらしました。新しいnightly機能も重要な役割を果たしています:Polonius Alphaにより効率的な Borrow Checking が可能になり(例:非同期なライフタイム解析を用いてSerdeの命令数を3〜5%削減)、Penelope は高度なトレイト解決を活性化させ、引き続きパフォーマンス向上に貢献しています。
ターゲットされたエンジニアリング作業により、いくつかのボトルネックに対処しました:Craneliftにおけるfixpointコールはデータフロー分析の変更により劇的に削減され、EverInitializedPlacesは約150万件から約9万件へと減少し、ウォールタイムを約30%節約しました。特化グラフの構築およびトレイトソルバーディスパッチ最適化によりさらにコンパイルコストが低下しました。match-stressベンチマークでは命令数が最大17%削減され、複数の個人コントリビューターによるPRで外れ値を持つcratesのコンパイル時間が15〜25%削減され、一部の改善では最高50%に達しました。その他の成果にはスタックサイズのデフォルト調整、インライン化の微調整、増分コンパイルにおけるデータ読み込みの最適化、そして予期せず命令数を削減したASTからHIRへのクリーンアップなどが含まれます。
歴史的なロールアッププルリクエストが、CIキャパシティ制限により止まっていた4件の遅延パフォーマンス改善をようやくマージしました。これらの変更は合わせて、Rustビルドエコシステム全体で即時かつ実用的なスピードアップをもたらします。待ち時間を短縮し、幅広いプロジェクトの開発サイクルを加速させます。
本文
Rust コンパイラのパフォーマンス:2 ヶ月で達成された驚異的な改善
Rust コンパイラのパフォーマンスに関する最新の進捗をまとめました。前回から 2 ヶ月(2026 年 7 月 29 日 - 9 月 28 日)の測定結果により、**平均ウォールクロック時間の短縮率は 4.57%に達しました。計 629 のベンチマークのうち、改善されたのは 555 件で、退歩したのはわずか 74 件のみです。多数のベンチマークで 2 桁以上の高速化が実現しており、専門用語ではこれを「緑色の海」**と呼びます。
📈 rustdoc の高速化
Noah Lev 氏による画期的な手法の詳細が新たに解説されました。非常に読み応えのある内容です。
⚡ Clippy の大幅改善
Jakub Beránek 氏が Clippy に PGO(プロファイル導く最適化)を適用し、大部分のベンチマークでウォールクロック時間の短縮を実現しました。
- 最良の場合:なんと 18% の短縮
🦙 LLVM バージョンアップによる速度向上
Nikita Popov 氏がコンパイラに使用する LLVM をバージョン 23 にアップグレードしました。
- 平均ウォールクロック時間の短縮率:1.2%
- 単一の PR でも印象的な成果であり、LLVM チームへの感謝を申し上げます。
🔒 新しい借用チェック子(Polonius Alpha)
新しい借用チェック子「Polonius Alpha」が Nightly 版で有効化されました。
- 精度向上: 既存のものより高く、以前却下されていた正当なプログラムも受け入れます。
- 課題: 計算量が増え、
クレートなどでコンパイル時間に影響が出ることがあります。serde - 解決への取り組み(Jack Huey 氏):
の計算を遅延評価化し、live
で命令数を 3〜5%、他ベンチマークで 1% 未満削減(PR #161938)。serde- データ構造の見直しとインライン処理の微調整により、多数のベンチマークで命令数削減を実現(PR #163027)。
残りの退歩の改善には作業が必要ですが、「緑色の海」がこの程度の欠陥に隠れ込むほど、多くの他への改善が蓄積されています。
🍍 新しい特徴求解器(Trait Solver)
新しい特徴求解器「Pineapple Häagen-Dazs」も Nightly 版で有効化されました。
- 状況: 借用チェック子と同様に、一部のケースでは遅延が見られます。
- Jana Dönszelmann 氏による詳細な投稿: パフォーマンス改善に向けた取り組みについて解説しています。
- 私の貢献(PR: #160479, #160605, #160801, #160892, #161077, #161211):
- 特定のアウトライヤー(例外に遅い)クレータのコンパイル時間を劇的に短縮。
- **50%、25%、15%**の削減を実現し、あるストレステストではそれ以上に改善しました。
- 特定のアウトライヤー(例外に遅い)クレータのコンパイル時間を劇的に短縮。
🛠️ xmakro の貢献による改善
新貢献者の xmakro 氏が再び素晴らしい改善をもたらしました。
- PR #157281:
グラフ構築におけるspecialization
の処理を最適化。impl- 全てのベンチマークで平均サイクル数を削減(1.58%)。単一 PR で驚くべき成果です。
- PR #158059: インクリメンタルコンパイルデータの読み込みを最適化。
- 最良の場合、命令数削減6%。
- PR #160473: ホットなパスにおける配列回避処理。
- 多数のベンチマークで命令数削減(最良の場合、2%)。
- PR #160268: 古い/新しい求解器選択コードを静的ディスパッチへ移行。
- 明らかな非効率性の修正により、多くの配列回避を実現(主に 1% 未満の削減)。
- ※以前
の配置場所の違いで退步を引き起こしていましたが、これを解消しました。#[inline]
🔄 データフロー解析(Dataflow Analysis)の効率化
- PR #160193: CFG トルザアルゴリズムを変更し、固定点への到達速度を向上。
クレートでcranelift-codegen
の呼び出し回数を 150 万回 → 9 万回へ削減。apply_effects_in_block- このクレータのチェックビルドにおいて、ウォールクロック時間を約**30%**短縮。
- PR #160033:
を再度効率化(不要なデータの追跡を排除)。EverInitializedPlaces
で命令数削減17%、他ベンチマークで 1% 未満削減。match-stress
🤖 LLM の活用
特定種類の解析において LLM(大規模言語モデル)の能力が高まってきました。
- 依然として全てのコードとテキストを独自に作成していますが、今回のいくつかの PR でLLM の解析支援が有益に活用されました。
🔧 その他の項目(Miscellaneous)
- PR #160535: デフォルトスタックサイズ増加による
の撤廃。ensure_sufficient_stack- 多くのベンチマークで命令数削減(最良の場合、ほぼ3%)。
- PR ロールアップ戦略(Rollup):
- パフォーマンス改善待ちの PR が多数あるため、Jonathan Brouwer 氏による「10 つのパフォーマンス改善 PR を含む rollup」(PR #160506)を作成。
- その後の PR #162859 で、4 つのパフォーマンス改善 PR を含むロールアップも作成されました。
- マージ後、個々の PR の効果を個別に検証可能であり、予期せぬ効果の混入を防止しています。
- PR #162747: AST から HIR への降下処理のクリーンアップ。
- パフォーマンス意図虽是なしでしたが、多くのベンチマークで命令数削減(最良の場合、1.5%)を実現しました。
💼 勤務状況の変更
明日より、Hexcat 社においてコンパイラのパフォーマンス最適化プロジェクトのために勤務を開始します!
- Mara Bos 氏、Predrag Gruevski 氏をはじめ、この実現に尽力くださったすべての方に心から感謝申し上げます。
※編集者注: 新しい求解器の正式名称は「Pineapple Häagen-Dazs」です。以前の"Pineapple Häagen-Dazs"ではなく、ここでは正式名称を使用しています(※元の文章の冗談要素を考慮し、正確な名称として記述)。