Rollup merge of #83791 - the8472:relax-zip-side-effect-guarantee, r=dtolnay
Weaken guarantee around advancing underlying iterators in zip The current guarantee (introduced in #52279) is too strong as it prevents adapters from exploiting knowledge about the iterator length and using counted loops for example because they would stop calling `next()` before it ever returned `None`. Additionally several nested zip iterators already fail to uphold this. This does not yet remove any of the specialization code that tries (and sometimes fails) to uphold the guarantee for `next()` because removing it would also affect `next_back()` in more surprising ways. The intent is to be able to remove for example this branch36bcf40697/library/core/src/iter/adapters/zip.rs (L234-L243)
or this test36bcf40697/library/core/tests/iter/adapters/zip.rs (L177-L188)
Solves #82303 by declaring it a non-issue.
This commit is contained in:
commit
14ef447d12
@ -461,8 +461,10 @@ pub trait Iterator {
|
||||
/// In other words, it zips two iterators together, into a single one.
|
||||
///
|
||||
/// If either iterator returns [`None`], [`next`] from the zipped iterator
|
||||
/// will return [`None`]. If the first iterator returns [`None`], `zip` will
|
||||
/// short-circuit and `next` will not be called on the second iterator.
|
||||
/// will return [`None`].
|
||||
/// If the zipped iterator has no more elements to return then each further attempt to advance
|
||||
/// it will first try to advance the first iterator at most one time and if it still yielded an item
|
||||
/// try to advance the second iterator at most one time.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
Loading…
x
Reference in New Issue
Block a user