RangeFrom is a Rust iterator type that represents an unbounded range starting from a value (e.g., 5..) and continuing infinitely. Its design has been contentious for over a decade.

The type was introduced in RFC 198 (slice notation) in 2014 and formalized as a type via RFC 439, which proposed ranges as proper language constructs rather than slicing sugar. The original implementation, merged in December 2014 via pull request 19858, immediately included deliberate overflow handling: when iteration reaches the maximum value of the integer type, the iterator wraps or panics rather than terminating. This design choice matched C-style for loops and reflected IRC discussions (now largely lost to history) favoring infinite open-ended intervals over bounded ones.

The overflow behavior created persistent friction. Two days after the merge, an issue was filed questioning the approach. By 2015–2016, multiple bug reports emerged from users surprised that 1.. panicked at u8::MAX or looped endlessly in release builds. A 2016 Reddit post highlighted the confusion; the subsequent documentation patch acknowledged the undefined behavior but made no code changes. In 2020, the behavior was formally documented and stabilized, stipulating that overflow "is allowed to panic, wrap, or saturate" depending on the Step trait implementation and overflow checks profile.

In November 2023, an API Change Proposal (ACP #304) revisited the overflow semantics. That same month, a pre-RFC titled "Fixing Range by 2027" proposed deeper changes: making range types Copy and decoupling the Iterator implementation from the Range* types themselves. RFC 3550 (opened December 2025, merged May 2026) standardized new range types but left overflow behavior as an unresolved question for the libs-api team.

On June 4, 2024, the libs-api team decided to modify the current behavior: the final value (T::MAX) should now be yielded even with overflow checks enabled, and without checks it simply wraps. Rust 1.96.0 (May 28, 2026) stabilized the new types, closing a design chapter that spanned twelve years.

The author frames this history as context for a follow-up post expressing reservations about the current design.