Rust schaltet den Trait-Solver der nächsten Generation in Nightly frei
3 Min. Lesezeit
Die Zahlen
- 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

Das Rust-Projekt hat seinen Trait-Solver der nächsten Generation am 22. August standardmäßig in Nightly-Builds aktiviert und nennt ihn "die größte Einzeländerung am Rust-Compiler seit dessen Erstveröffentlichung". Die Ankündigung stellt die Stabilisierung "in den nächsten Monaten" in Aussicht - der Code jedes Rust-Entwicklers wird also bald durch einen neu geschriebenen Kern des Compilers laufen, und der richtige Zeitpunkt herauszufinden, ob der eigene das übersteht, ist jetzt, solange ein Regressionsbericht noch zählt.
Was der Trait-Solver eigentlich tut
Der Trait-Solver ist der Teil des Compilers, der Rusts häufigste Frage beantwortet: Implementiert dieser Typ dieses Trait? Er beweist Where-Klauseln, normalisiert assoziierte Typen und entscheidet die Trait-Bounds hinter fast jeder Zeile generischen Codes. LWNs Bericht verfolgt die Arbeit ein Jahrzehnt zurück: Eine experimentelle Neuimplementierung namens Chalk begann 2015, und 2023 entschied sich das Projekt für die Neufassung, die der heutige Solver wurde.
Der neue Solver verändert auch, was die Sprache ausdrücken kann. LWN erklärt, dass er koinduktives Schließen anwendet - dessen Autor Daroc Alden es über den Kontrast beschreibt: "Ein induktiver Zyklus ist eine Endlosschleife oder eine rekursive Funktion ohne Basisfall. Ein koinduktiver Zyklus... entspricht eher einem Generator" - und damit selbstbezügliche Trait-Schnittstellen ermöglicht, die der alte Solver schlicht nicht beweisen konnte. Laut LWN ist diese koinduktive Behandlung bewusst auf eine kleine Menge von Autotraits wie Send beschränkt.
Ein Jahrzehnt in der Entstehung
| Meilenstein | Wann |
|---|---|
| Chalk, die erste experimentelle Neuimplementierung, beginnt | 2015 |
| Entscheidung zur Neufassung als heutiger Solver | 2023 |
| Neuer Solver in Stable - nur für Kohärenzprüfung | vor dieser Änderung |
| Standard in Nightly | 22. August 2026 |
| Geplante Stabilisierung | "in den nächsten Monaten" |
Der Umfang ist für den Austausch einer Compiler-Komponente ungewöhnlich: Das Rust-Team gibt an, der neue Solver behebe mehr als 200 gegen den alten angesammelte GitHub-Issues, und LWNs Momentaufnahme vom März zählte 76 offene und 78 geschlossene Bugs gegen die neue Implementierung - eine Codebasis, die offen getestet wird, kein fertiger Austauschbaustein.
Was bricht - und was frei wird
Das Rust-Team ist ungewöhnlich direkt, was die Kosten angeht: "Das ist
eine unglaublich große Änderung, die zu einer nicht trivialen Menge an
Brüchen führt." Mancher Code, der heute kompiliert, wird nicht mehr
kompilieren; mancher Code, den der alte Solver fälschlich ablehnte,
kompiliert nun. Die Ankündigung nennt geändertes Verhalten für
impl Trait in Rückgabeposition, Type Alias Impl Trait und Return Type
Notation, dazu eine korrektere Behandlung assoziierter Typen in
higher-ranked Typen - womit fehlerhafte Typinferenz entfällt, die der
alte Solver zuließ.
Der Gewinn laut Ankündigung: Der Abschied von der alten Implementierung macht den Weg frei für Type Alias Impl Trait und Return Type Notation als stabile Features, öffnet die Tür für neue implizite Standard-Trait-Bounds und erlaubt dem Team, die verbliebenen bekannten Unsauberkeiten des Typsystems zu beheben. Auch Performance-Gewinne gibt es - das Team nennt das Crate datafusion, das unter dem neuen Solver 8-mal schneller kompiliert.
Was das für Entwickler bedeutet
Wer ein Rust-Crate pflegt, sollte es diese Woche gegen das aktuelle
Nightly laufen lassen - rustup update nightly && cargo +nightly check
ist der ganze Test - und für jede Regression ein Issue eröffnen. Die
Bitte des Teams ist ausdrücklich: "Bitte probiert das aktuelle Nightly
aus und eröffnet ein Issue, wenn ihr auf Bugs oder Regressionen stoßt."
Brüche, die Sie jetzt melden, formen die Stabilisierung; Brüche, die Sie
nach dem Stable-Release entdecken, sind nur noch Ihr Problem.
Wenn Ihre CI noch keinen Nightly-Job enthält, ist dies das stärkste Argument seit Jahren, einen hinzuzufügen - auch als nicht blockierender Hinweis-Build: Eine "größte Änderung seit 1.0", die binnen Monaten in Stable landet, ist genau das Ereignis, für das dieser Kanal existiert.
Und wer an die Wände des alten Solvers gestoßen ist - trait-lastige API-Entwürfe, die an rätselhaften Inferenzfehlern scheiterten, oder Hänger bei tief generischem Code -, sollte genau diese Fälle auf Nightly erneut testen. Zwischen der Koinduktions-Unterstützung, den Korrekturen bei assoziierten Typen und Compile-Zeit-Gewinnen wie bei datafusion könnten einige langjährige "Das kann Rust nicht"-Umgehungen in Ihrer Codebasis gerade überflüssig geworden sein.