Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RangeFrom iterator overflows when it gets to the maximum value of the type #25696

Closed
Aatch opened this issue May 22, 2015 · 4 comments
Closed

Comments

@Aatch
Copy link
Contributor

Aatch commented May 22, 2015

So if you have (0u8..) and iterate over it, it will keep going forever (in a release build anyway), producing 0, 1, 2, ... 255, 0, 1, 2, ...

That is unexpected. It also panics in a debug build, so I assume it's also not intentional. I propose that instead of overflowing, the iterator instead returns None.

@Aatch Aatch added the A-libs label May 22, 2015
@XMPPwocky
Copy link
Contributor

Would that change be backwards compatible? Arguably not, since it changes observable behavior in stable code, and although nobody should be relying on it, you never know.

(For the record, I agree this is surprising, probably wrong, behavior. For example, iterating over (1u8..) will eventually give you 0!)

@Gankra
Copy link
Contributor

Gankra commented May 22, 2015

CC @nrc (who probably has the best memory on this precise decision)

@nrc
Copy link
Member

nrc commented May 23, 2015

This is the intentional behaviour. The expectation is that you will only use such iterators along with take() or some other safe guard against overflow. (We basically chose what seemed like the least-worst option here).

@alexcrichton
Copy link
Member

I agree with @nrc that this is intended behavior currently. The precise semantics of when the overflow occurs I think is covered by #25708, so I'm going to close this in favor of that. Feel free to reopen if you disagree though!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants