RangeFrom ist ein Rust-Iterator-Typ, der einen unbegrenzten Bereich ab einem Wert darstellt (z. B. 5..) und theoretisch unendlich weiterläuft. Sein Design war über ein Jahrzehnt lang umstritten.

Der Typ wurde 2014 in RFC 198 (Slice-Notation) eingeführt und durch RFC 439 als formaler Typ standardisiert, der Ranges als echte Sprachkonstrukte und nicht nur als Slicing-Syntax definierte. Die ursprüngliche Implementierung vom Dezember 2014 (Pull Request 19858) enthielt sofort absichtliches Overflow-Handling: Wenn die Iteration den Maximalwert des Integer-Typs erreicht, läuft der Iterator über oder wirft eine Panic, anstatt zu terminieren. Diese Designentscheidung orientierte sich an C-ähnlichen for-Schleifen und spiegelte IRC-Diskussionen wider (die heute größtenteils verloren sind), die unendliche offene Intervalle gegenüber begrenzten bevorzugten.

Das Overflow-Verhalten führte zu anhaltendem Unbehagen. Zwei Tage nach dem Merge wurde ein Issue eingereicht, das den Ansatz in Frage stellte. Von 2015 bis 2016 entstanden mehrere Bug-Reports von Benutzern, die überrascht waren, dass 1.. bei u8::MAX panicte oder in Release-Builds endlos lief. Ein Reddit-Post von 2016 beleuchtete die Verwirrung; der anschließende Dokumentations-Patch bestätigte das undefinierte Verhalten, änderte aber keinen Code. 2020 wurde das Verhalten formal dokumentiert und stabilisiert, mit der Stipulation, dass Overflow "panicen, wrappen oder saturieren" darf, abhängig von der Step-Trait-Implementierung und dem Overflow-Checks-Profil.

Im November 2023 wurde die Overflow-Semantik via ACP #304 neu bewertet. Im selben Monat schlug eine Pre-RFC mit dem Titel "Fixing Range by 2027" tiefergehende Änderungen vor: Range-Typen sollten Copy werden und die Iterator-Implementierung sollte von den Range*-Typen entkoppelt werden. RFC 3550 (eröffnet Dezember 2025, gemerged Mai 2026) standardisierte neue Range-Typen, ließ Overflow-Verhalten aber als ungelöste Frage für das libs-api-Team offen.

Am 4. Juni 2024 entschied das libs-api-Team, das aktuelle Verhalten zu modifizieren: Der Finalwert (T::MAX) sollte nun auch mit aktivierten Overflow-Checks yieldet werden; ohne Checks wraps es einfach. Rust 1.96.0 (28. Mai 2026) stabilisierte die neuen Typen und schloss ein Designkapitel, das zwölf Jahre andauerte.

Der Autor stellt diese Historie als Kontext für einen Folgeartikel dar, in dem er Vorbehalte zum aktuellen Design äußert.