Similar to #601 but for all our iterators and iterator adaptors.
Laziness reference: https://doc.rust-lang.org/std/iter/index.html#laziness
And I think each iterator struct should have the related must_use attribute:
- Adaptors:
#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
- Non-adaptors:
#[must_use = "iterators are lazy and do nothing unless consumed"]
Load some items might be unavoidable in some case(?) but surely not all. TODO:
Similar to #601 but for all our iterators and iterator adaptors.
Laziness reference: https://doc.rust-lang.org/std/iter/index.html#laziness
And I think each iterator struct should have the related
must_useattribute:#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]#[must_use = "iterators are lazy and do nothing unless consumed"]Load some items might be unavoidable in some case(?) but surely not all. TODO:
must_useattributes on adaptors #794Permutationslazy #793permutations(n)consumesnitems at definition (so not lazy whenn >= 1).Combinationslazy #795combinations(n)consumesnitems at definition (so not lazy whenn >= 1).Intersperse[With]lazy #797intersperse[_with]both consume 1 item at definition.Productlazy #800a.cartesian_product(b)consumes 1 item ofaat definition.Therefore
iproduct!(i_1, i_2, i_n)consumes 1 item of the firstn - 1iterators at definition.CoalesceBylazy #801coalesce,dedup[_by][_with_count]all consume 1 item at definition.CONTRIBUTING.md#767 mention laziness for new iterator adaptors and where to test it.tuple_combinations::<T>consume 1 item per nested iterator at definition ("T::len()" - 1items so not lazy for(_, _, ...)).kmerge[_by]collect all items and consume 1 item of each iterator at definition.Maybe update the documentation of all "eager" adaptors to say that there are "eager":dropping dropping_back sorted_unstable sorted_unstable_by sorted_unstable_by_key sorted sorted_by sorted_by_key sorted_by_cached_key k_smallest k_smallest_by k_smallest_by_key k_largest k_largest_by k_largest_by_key tail(sodropping[_back]and methods returningVec[Deque]IntoIter).It's already good enough, it says it's "eager", or that "it consumes the entire iterator", or that "if collected to a
Vec[Deque], is converted without any extra copying or allocation cost".