RangeFrom est un type itérateur Rust représentant une plage non bornée à partir d'une valeur (par ex. 5..) et s'étendant théoriquement à l'infini. Sa conception a été controversée pendant plus d'une décennie.

Le type a été introduit en 2014 dans la RFC 198 (notation de tranche) et formalisé en tant que type via la RFC 439, qui proposait des ranges comme véritables constructions du langage plutôt que comme sucre syntaxique pour le slicing. L'implémentation originale de décembre 2014 (pull request 19858) incluait immédiatement une gestion délibérée du débordement : lorsque l'itération atteint la valeur maximale du type entier, l'itérateur se wrappe ou génère une panique plutôt que de terminer. Ce choix de conception correspondait aux boucles for de style C et reflétait les discussions IRC (largement perdues aujourd'hui) privilégiant les intervalles ouverts infinis sur les intervalles bornés.

Le comportement de débordement a créé une friction persistante. Deux jours après la fusion, une issue a été ouverte questionnant l'approche. Entre 2015 et 2016, plusieurs rapports de bugs ont émergé d'utilisateurs surpris que 1.. génère une panique à u8::MAX ou créée une boucle infinie en mode release. Un post Reddit de 2016 a mis en lumière la confusion ; le correctif de documentation ultérieur a reconnu le comportement indéfini mais n'a modifié aucun code. En 2020, le comportement a été formellement documenté et stabilisé, stipulant que le débordement « peut paniquer, wrapper ou saturer » selon l'implémentation du trait Step et le profil de vérifications de débordement.

En novembre 2023, la sémantique de débordement a été revisitée via l'ACP #304. Le même mois, une pré-RFC intitulée « Fixing Range by 2027 » a proposé des changements plus profonds : rendre les types range Copy et découpler l'implémentation Iterator des types Range*. La RFC 3550 (ouverte décembre 2025, fusionnée mai 2026) a standardisé de nouveaux types de range mais a laissé le comportement de débordement comme question non résolue pour l'équipe libs-api.

Le 4 juin 2024, l'équipe libs-api a décidé de modifier le comportement actuel : la valeur finale (T::MAX) devrait maintenant être produite même avec les vérifications de débordement activées, et sans elles, elle se wrappe simplement. Rust 1.96.0 (28 mai 2026) a stabilisé les nouveaux types, fermant un chapitre de conception qui s'est étendu sur douze ans.

L'auteur encadre cette histoire comme contexte pour un article de suivi exprimant des réserves sur la conception actuelle.