Rust、次世代トレイトソルバーをNightlyビルドで有効化
3 分で読めます
数字で見る
- 200+
- GitHub issues fixed by the new solver, per the Rust team
- ~4 yrs
- of active development before this switch
- 8x
- faster on the datafusion crate, per the announcement

Rustプロジェクトは8月22日、次世代トレイトソルバーをNightlyビルドで デフォルト有効にした。プロジェクト自身が「初版リリース以来、Rust コンパイラに対する最大の単一変更」と呼ぶものだ。発表は安定化を「数か月 以内」としている。つまり、すべてのRust開発者のコードがまもなく書き 直されたコンパイラの中核を通ることになる。自分のコードが無事に通るかを 確かめるなら、リグレッション報告がまだ意味を持つ今しかない。
トレイトソルバーは何をしているのか
トレイトソルバーは、Rustで最も頻繁な問い - この型はこのトレイトを実装 しているか - に答えるコンパイラの部品だ。where句を証明し、関連型を正規化 し、ジェネリックなコードのほぼ全行の背後にあるトレイト境界を判定する。 LWNの記事はこの取り組みを10年さかのぼる。Chalkと呼ばれる実験的な再実装が 2015年に始まり、2023年にプロジェクトは今日のソルバーとなる書き直しを 決めた。
新しいソルバーは言語が表現できる範囲も変える。LWNによれば、余帰納的 (coinductive)推論を適用する。著者のDaroc Aldenは対比でこう説明する。 「帰納的なサイクルは無限ループ、つまり基底ケースのない再帰関数だ。 余帰納的なサイクルは...ジェネレーターのようなものに対応する」。これに より、旧ソルバーには証明できなかった自己言及的なトレイトベースの インターフェースが可能になる。LWNによれば、この余帰納的な扱いは意図的に Sendなど少数のautotraitに限定されている。
10年がかりの仕事
| 節目 | 時期 |
|---|---|
| 最初の実験的再実装Chalkが始動 | 2015年 |
| 現行ソルバーへの書き直しを決定 | 2023年 |
| 新ソルバーがStableに搭載 - ただし一貫性検査のみ | 今回の変更以前 |
| Nightlyでデフォルト化 | 2026年8月22日 |
| 安定化の計画 | 「数か月以内」 |
コンパイラ部品の入れ替えとしては規模が異例だ。Rustチームは新ソルバーが 旧実装に積み上がった200件超のGitHub Issueを解決するとし、LWNの3月時点の 集計では新実装に対して76件のオープンと78件のクローズ済みバグが追跡されて いた - 完成品の差し替えではなく、公開の場でテストされてきたコードベース である。
何が壊れ、何が解放されるのか
Rustチームはコストについて異例なほど率直だ。「これは信じられないほど
大きな変更であり、無視できない量の破壊を伴う」。今日コンパイルできる
コードの一部はコンパイルできなくなり、旧ソルバーが誤って拒否していた
コードの一部はコンパイルできるようになる。発表は、戻り値位置の
impl Trait、Type Alias Impl Trait、Return Type Notationの扱いの変更、
そしてhigher-ranked型における関連型のより正確な処理 - 旧ソルバーが許して
いた誤った型推論の除去 - を挙げている。
見返りは、発表によれば旧実装の引退がType Alias Impl TraitとReturn Type Notationの安定化への道を開き、新しい暗黙のデフォルトトレイト境界を可能に し、型システムに残る既知の不健全性の修正を可能にすることだ。性能面の 成果もある。チームはdatafusionクレートが新ソルバーでは8倍速くコンパイル できると述べている。
開発者にとっての意味
Rustクレートを保守しているなら、今週中に最新のNightlyで走らせてみる
ことだ。テストは rustup update nightly && cargo +nightly check だけで
済む。そしてリグレッションがあればIssueを立てる。チームの要請は明確だ。
「最新のNightlyを試し、バグやリグレッションに遭遇したらIssueを開いて
ほしい」。いま報告する破壊は安定化の形を決める。Stable到達後に見つける
破壊は、ただの自分の問題になる。
CIにNightlyジョブがないなら、これは近年で最強の追加理由だ。ブロックしない 参考ビルドでも構わない。「1.0以来最大の変更」が数か月以内にStableに届く ことこそ、あのチャンネルが存在する理由そのものだ。
そして旧ソルバーの壁にぶつかった経験があるなら - 謎の推論エラーで頓挫 したトレイト中心のAPI設計や、深くジェネリックなコードでのハング - まさに そのケースをNightlyで再テストする価値がある。余帰納のサポート、関連型の 修正、datafusionのようなコンパイル時間の改善を合わせると、コードベースに 残る「Rustにはできない」前提の回避策のいくつかは、ちょうど取り外せるように なったかもしれない。