Rust stabilisiert den Never-Type nach zehn Jahren und fünf Versuchen
4 Min. Lesezeit
Die Zahlen
- 10
- years the feature sat unstable
- 5
- earlier stabilization attempts that failed
- 3,277
- crates crater flagged as regressions

Rusts Never-Type ist endlich stabil. Der zuständige Pull Request mit der Nummer 155499 wurde am 24. August 2026 in rust-lang/rust gemergt und ist für Rust 1.100.0 eingeplant. Er bringt eine brechende Änderung mit. Das ist also eine Release-Notiz zum Lesen, nicht zum Überfliegen.
Der Never-Type wird als einzelnes Ausrufezeichen geschrieben. Es ist der Typ eines Ausdrucks, der niemals einen Wert liefert, weil er panikt, endlos läuft oder vorher aus der Funktion zurückkehrt. Rust nutzt ihn intern seit Jahren, um solche Sackgassen zu typisieren. Was fehlte, war die Möglichkeit, ihn im eigenen Code hinzuschreiben und sich darauf zu verlassen.
Was sich tatsächlich geändert hat
Laut dem Pull Request kommen drei Dinge zusammen.
- Der Never-Type ist stabil, und der PR schließt die Tracking-Issues mit den Nummern 35121 und 148922.
- Jede Rust-Edition löst einen unbeschränkten Never-Type jetzt zum Never-Type auf, statt auf das leere Tupel zurückzufallen. Das ist der brechende Teil.
std::convert::Infallibleaus der Standardbibliothek wird ein einfaches Typ-Alias für den Never-Type.
Die Fallback-Änderung braucht Erklärung, denn sie kann das Verhalten Ihres Codes
ändern. Manchmal erreicht der Compiler eine Stelle, an der ein Wert nie
existieren kann und kein Typ festgelegt wurde. Historisch wählte er dort das
leere Tupel, geschrieben als ein Paar Klammern. Jetzt wählt er den Never-Type.
Weil der alte Fallback nicht mehr auftritt, entfernt der PR auch die Warnung,
die Code mit dieser Abhängigkeit markierte, benannt
dependency_on_unit_never_type_fallback.
Das ist eine echte Verhaltensänderung, und das Rust-Projekt hat sie gemessen. Der PR berichtet, dass crater zunächst 3.277 Regressionen zeigte. crater ist das Werkzeug, das einen großen Teil der veröffentlichten Crates gegen einen vorgeschlagenen Compiler kompiliert. Die endgültige Änderung landete in 18 Commits mit Fixes, Tests und Dokumentation.
Zehn Jahre Anläufe
Das Tracking-Issue erzählt die längere Geschichte. Issue 35121 wurde am 29. Juli 2016 eröffnet, um RFC 1216 zu verfolgen. Der Vorschlag wollte das Ausrufezeichen von einer Sondernotation zu einem echten Typ befördern. Das sind zehn Jahre offen. Der Autor des PR dieser Woche schreibt im eigenen Blog, es habe fünf frühere Stabilisierungsversuche gegeben und allein dieser Anlauf habe mehr als zwei Jahre gedauert.
| Im Tracking-Issue verzeichneter Meilenstein | Was passierte |
|---|---|
| RFC 1216, Issue 35121 eröffnet Juli 2016 | Never-Type zu einem echten Typ machen |
| PR 35162 | Erste Implementierung |
| PR 65355 | Stabilisierung mit Ziel Rust 1.41.0 |
| PR 67224 | Diese Stabilisierung nach Regressionen zurückgenommen |
| Issue 123748 | Fallback zuerst innerhalb der Edition Rust 2024 geändert |
| PR 155499, gemergt August 2026 | Fallback allgemein gemacht, Never-Type stabilisiert |
Die Rücknahme ist der lehrreiche Eintrag. Die Stabilisierung wurde versucht, echte Crates brachen, und die Änderung wurde wieder herausgenommen. Die im Issue verzeichneten Blocker sind alle Regressionsberichte, mit den Nummern 66757, 67225 und 65992. Der letzte behandelt, wie divergierende Ausdrücke zurückfallen sollen. Der Weg um das Problem herum war, den Fallback zuerst in einer Edition zu ändern und ihn allgemein zu machen, sobald das Ökosystem ihn aufgenommen hatte.
Was das für Entwickler bedeutet
Warten Sie nicht auf 1.100.0, um es herauszufinden. Bauen Sie Ihr Crate jetzt auf Nightly und lesen Sie die Diagnosen. Fallback-Änderungen sind die Art von Bruch, die an einer Stelle still kompiliert und an einer anderen fehlschlägt. Achten Sie auf generischen Code, in dem ein Typparameter nur durch einen Ausdruck festgelegt wird, der panikt oder früh zurückkehrt. Genau dort wählte der Compiler früher das leere Tupel für Sie.
Die Änderung bei Infallible ist die, nach der man greppen sollte. Wenn Ihre
Fehlertypen std::convert::Infallible nutzen: es ist jetzt ein Alias und kein
eigenes Enum. Aliase verhalten sich an zwei konkreten Stellen anders. Sie können
keine eigene Trait-Implementierung mehr getrennt vom Never-Type schreiben, und
jeder Match-Arm, der es konstruiert, braucht einen zweiten Blick. Der meiste
Code bleibt unberührt. Eine Bibliothek, die Konvertierungen über beide Namen
implementiert, sollte aber vor 1.100.0 im Stable auf einen Konflikt prüfen.
Es gibt auch eine Aufräumarbeit, die sich lohnt. Wenn Sie die Warnung
dependency_on_unit_never_type_fallback stummgeschaltet oder umgangen haben:
diese Umgehungen sind jetzt totes Gewicht, und der Lint, der sie
rechtfertigte, ist weg. Suchen Sie danach, entfernen Sie das Gerüst und lassen
Sie den Typechecker die Arbeit machen.
Die größere Lehre betrifft, wie Rust brechende Änderungen überhaupt ausliefert. Das Muster lohnt die Nachahmung, wenn Sie eine Bibliothek mit echten Nutzern pflegen. Stellen Sie das neue Verhalten hinter eine Opt-in-Grenze, in Rusts Fall eine Edition. Messen Sie den Wirkungsradius gegen echten veröffentlichten Code. Machen Sie es erst allgemein, wenn diese Zahl gesunken ist. Zehn Jahre sehen von außen langsam aus. Eine zurückgenommene Stabilisierung und ein crater-Lauf mit 3.277 markierten Crates erklären das meiste davon.
Sources
- I stabilized never type - blog.ihatereality.space
- stabilize never type (PR #155499) - GitHub - rust-lang/rust
- Tracking issue for RFC 1216 (promoting ! to a type) - GitHub - rust-lang/rust