For reference, this topic was discussed last August as well:
https://mail.mozilla.org/pipermail/rust-dev/2013-August/005113.html

On Thu, Feb 13, 2014 at 10:05 AM, Simon Sapin <simon.sa...@exyr.org> wrote:
> Hi,
>
> The Rust documentation currently makes iterators behavior undefined after
> .next() has returned None once.
>
> http://static.rust-lang.org/doc/master/std/iter/trait.Iterator.html
>>
>> The Iterator protocol does not define behavior after None is
>> returned. A concrete Iterator implementation may choose to behave
>> however it wishes, either by returning None infinitely, or by doing
>> something else.
>
>
> http://static.rust-lang.org/doc/master/guide-container.html
>>
>> In general, you cannot rely on the behavior of the next() method
>> after it has returned None. Some iterators may return None forever.
>> Others may behave differently.
>
>
>
> This is unfortunate. Code that accepts any iterator as input and does with
> it anything more complicated than a single 'for' loop will have to be
> defensive in order to not fall into undefined behavior.
>
> The type system can not enforce anything about this, but I'd like that we
> consider having conventions about "well-behaved" iterators.
>
> ---
>
> Proposal:
>
> 0. An iterator is said to be "well-behaved" if, after its .next() method has
> returned None once, any subsequent call also returns None.
>
> 1. Iterators *should* be well-behaved.
>
> 2. Iterators in libstd and other libraries distributed with rustc *must* be
> well-behaved. (I.e. not being well-behaved is a bug.)
>
> 3. When accepting an iterator as input, it's ok to assume it's well-behaved.
>
> 4. For iterator adaptors in particular, 3. means that 1. and 2. only apply
> for well-behaved input. (So that, eg. std::iter::Map can stay as
> straightforward as it is, and does not need to be coded defensively.)
>
> ---
>
> Does the general idea sound like something y'all want? I'm not overly
> attached to the details.
>
> --
> Simon Sapin
> _______________________________________________
> Rust-dev mailing list
> Rust-dev@mozilla.org
> https://mail.mozilla.org/listinfo/rust-dev
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to