iter: specialize Take::count using advance_by - #160139
Merged
rust-bors[bot] merged 1 commit intoJul 30, 2026
Merged
Conversation
Collaborator
|
r? @jhpratt rustbot has assigned @jhpratt. Use Why was this reviewer chosen?The reviewer was selected based on:
|
Member
|
The change to @rustbot author |
Collaborator
|
Reminder, once the PR becomes ready for a review, use |
Rachit2323
force-pushed
the
take-count-specialization
branch
from
July 29, 2026 15:35
28c8b02 to
d800217
Compare
Member
|
Thanks! |
Contributor
jhpratt
added a commit
to jhpratt/rust
that referenced
this pull request
Jul 29, 2026
…on, r=joboet iter: specialize Take::count using advance_by Right now, when you call .count() on a Take iterator, it visits every single item one by one just to count them. That's slow. For example, if you have 1000 items and call .take(5).count(), it should just skip 5 items and return 5 — but today it actually goes through each item manually. This PR fixes that by using advance_by to skip items in bulk instead of visiting each one. After the skip, we know exactly how many items were consumed, so we return that number directly. This makes .count() faster for Take iterators, especially when the underlying iterator supports fast skipping.
rust-bors Bot
pushed a commit
that referenced
this pull request
Jul 29, 2026
Rollup of 18 pull requests Successful merges: - #159130 (a bit optimize four-digit chunks in integer formatting) - #159592 (core: implement bounded random sampling) - #159898 (Add intrinsic-test alias and set sample rate) - #158247 (hermit/fs: Return `unsupported()` instead of `from_raw_os_error(22)`) - #158649 (Hermit: fix `readdir()` ) - #159049 (Avoid ICE in From/TryFrom cast suggestion when encountering HRTBs) - #160053 (test: add test suite for the 85681 issue) - #160087 (Add regression test for nested associated-type projection ICE) - #160090 (rustc_resolve: Further reduce mutability in resolver) - #160099 (Resolver: split module resolutions into local and external resolutions) - #160106 (Add suggestions for `must_implement_one_of`) - #160117 (Remove unnecessary format usage) - #160134 (Work around Wine bug 60084 by calling WSAStartup at most once) - #160139 (iter: specialize Take::count using advance_by) - #160142 (bootstrap: remove use-lld config alias) - #160148 (Rename `errors.rs` file to `diagnostics.rs` (15/N)) - #160151 (Mark a doctest as requiring unwinding) - #160166 (Use correct feature gates for `f16`/`f128` `From` impls)
JonathanBrouwer
added a commit
to JonathanBrouwer/rust
that referenced
this pull request
Jul 29, 2026
…on, r=joboet iter: specialize Take::count using advance_by Right now, when you call .count() on a Take iterator, it visits every single item one by one just to count them. That's slow. For example, if you have 1000 items and call .take(5).count(), it should just skip 5 items and return 5 — but today it actually goes through each item manually. This PR fixes that by using advance_by to skip items in bulk instead of visiting each one. After the skip, we know exactly how many items were consumed, so we return that number directly. This makes .count() faster for Take iterators, especially when the underlying iterator supports fast skipping.
rust-bors Bot
pushed a commit
that referenced
this pull request
Jul 29, 2026
…uwer Rollup of 18 pull requests Successful merges: - #159898 (Add intrinsic-test alias and set sample rate) - #158247 (hermit/fs: Return `unsupported()` instead of `from_raw_os_error(22)`) - #158649 (Hermit: fix `readdir()` ) - #158693 (Add type-check to offload intrinisc calls) - #159049 (Avoid ICE in From/TryFrom cast suggestion when encountering HRTBs) - #159411 ([rustdoc] Correctly handle output options with --show-coverage) - #160053 (test: add test suite for the 85681 issue) - #160087 (Add regression test for nested associated-type projection ICE) - #160090 (rustc_resolve: Further reduce mutability in resolver) - #160099 (Resolver: split module resolutions into local and external resolutions) - #160106 (Add suggestions for `must_implement_one_of`) - #160117 (Remove unnecessary format usage) - #160134 (Work around Wine bug 60084 by calling WSAStartup at most once) - #160139 (iter: specialize Take::count using advance_by) - #160142 (bootstrap: remove use-lld config alias) - #160148 (Rename `errors.rs` file to `diagnostics.rs` (15/N)) - #160151 (Mark a doctest as requiring unwinding) - #160166 (Use correct feature gates for `f16`/`f128` `From` impls)
rust-bors Bot
pushed a commit
that referenced
this pull request
Jul 30, 2026
Rollup of 20 pull requests Successful merges: - #157669 (cfi: add diag mode support) - #158247 (hermit/fs: Return `unsupported()` instead of `from_raw_os_error(22)`) - #158649 (Hermit: fix `readdir()` ) - #158693 (Add type-check to offload intrinisc calls) - #159049 (Avoid ICE in From/TryFrom cast suggestion when encountering HRTBs) - #159411 ([rustdoc] Correctly handle output options with --show-coverage) - #160053 (test: add test suite for the 85681 issue) - #160087 (Add regression test for nested associated-type projection ICE) - #160090 (rustc_resolve: Further reduce mutability in resolver) - #160099 (Resolver: split module resolutions into local and external resolutions) - #160101 (Add missing `needs-unwind` annotation to `add-spawn-hook-reentrancy-159923` test) - #160106 (Add suggestions for `must_implement_one_of`) - #160117 (Remove unnecessary format usage) - #160134 (Work around Wine bug 60084 by calling WSAStartup at most once) - #160139 (iter: specialize Take::count using advance_by) - #160142 (bootstrap: remove use-lld config alias) - #160148 (Rename `errors.rs` file to `diagnostics.rs` (15/N)) - #160151 (Mark a doctest as requiring unwinding) - #160166 (Use correct feature gates for `f16`/`f128` `From` impls) - #160178 (Remove unused `va_start` intrinsic)
rust-bors Bot
pushed a commit
that referenced
this pull request
Jul 30, 2026
Rollup of 20 pull requests Successful merges: - #157669 (cfi: add diag mode support) - #158247 (hermit/fs: Return `unsupported()` instead of `from_raw_os_error(22)`) - #158649 (Hermit: fix `readdir()` ) - #158693 (Add type-check to offload intrinisc calls) - #159049 (Avoid ICE in From/TryFrom cast suggestion when encountering HRTBs) - #159411 ([rustdoc] Correctly handle output options with --show-coverage) - #160053 (test: add test suite for the 85681 issue) - #160087 (Add regression test for nested associated-type projection ICE) - #160090 (rustc_resolve: Further reduce mutability in resolver) - #160099 (Resolver: split module resolutions into local and external resolutions) - #160101 (Add missing `needs-unwind` annotation to `add-spawn-hook-reentrancy-159923` test) - #160106 (Add suggestions for `must_implement_one_of`) - #160117 (Remove unnecessary format usage) - #160134 (Work around Wine bug 60084 by calling WSAStartup at most once) - #160139 (iter: specialize Take::count using advance_by) - #160142 (bootstrap: remove use-lld config alias) - #160148 (Rename `errors.rs` file to `diagnostics.rs` (15/N)) - #160151 (Mark a doctest as requiring unwinding) - #160166 (Use correct feature gates for `f16`/`f128` `From` impls) - #160178 (Remove unused `va_start` intrinsic)
rust-timer
added a commit
that referenced
this pull request
Jul 30, 2026
Rollup merge of #160139 - Rachit2323:take-count-specialization, r=joboet iter: specialize Take::count using advance_by Right now, when you call .count() on a Take iterator, it visits every single item one by one just to count them. That's slow. For example, if you have 1000 items and call .take(5).count(), it should just skip 5 items and return 5 — but today it actually goes through each item manually. This PR fixes that by using advance_by to skip items in bulk instead of visiting each one. After the skip, we know exactly how many items were consumed, so we return that number directly. This makes .count() faster for Take iterators, especially when the underlying iterator supports fast skipping.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Right now, when you call .count() on a Take iterator, it visits every single item one by one just to count them. That's slow.
For example, if you have 1000 items and call .take(5).count(), it should just skip 5 items and return 5 — but today it actually goes through each item manually.
This PR fixes that by using advance_by to skip items in bulk instead of visiting each one. After the skip, we know exactly how many items were consumed, so we return that number directly.
This makes .count() faster for Take iterators, especially when the underlying iterator supports fast skipping.