Skip to content
Tech AI Wire
Coding

Rust、次世代トレイトソルバーをNightlyビルドで有効化

3 分で読めます

著者 Tech AI Wire Team

数字で見る

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
The Rust gear logo printed on a white card with a red metal gear lying in front of it

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にはできない」前提の回避策のいくつかは、ちょうど取り外せるように なったかもしれない。