Closed
Description
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:
- Add missing
must_use
attributes on adaptors #794 - Make
Permutations
lazy #793permutations(n)
consumesn
items at definition (so not lazy whenn >= 1
). - Make
Combinations
lazy #795combinations(n)
consumesn
items at definition (so not lazy whenn >= 1
). - Make
Intersperse[With]
lazy #797intersperse[_with]
both consume 1 item at definition. - Make
Product
lazy #800a.cartesian_product(b)
consumes 1 item ofa
at definition.
Thereforeiproduct!(i_1, i_2, i_n)
consumes 1 item of the firstn - 1
iterators at definition. - Make
CoalesceBy
lazy #801coalesce
,dedup[_by][_with_count]
all consume 1 item at definition. - Test the laziness of our iterators #792
- Create
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()" - 1
items 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 aVec[Deque]
, is converted without any extra copying or allocation cost".
Metadata
Metadata
Assignees
Labels
No labels