stabilize new RangeFrom type and iterator#153380
stabilize new RangeFrom type and iterator#153380rust-bors[bot] merged 1 commit intorust-lang:mainfrom
Conversation
This comment was marked as resolved.
This comment was marked as resolved.
| /// *Note*: Overflow in the [`Iterator`] implementation (when the contained | ||
| /// *Note*: Overflow in the [`IntoIterator`] implementation (when the contained | ||
| /// data type reaches its numerical limit) is allowed to panic, wrap, or | ||
| /// saturate. This behavior is defined by the implementation of the [`Step`] | ||
| /// trait. For primitive integers, this follows the normal rules, and respects | ||
| /// the overflow checks profile (panic in debug, wrap in release). Note also | ||
| /// that overflow happens earlier than you might assume: the overflow happens | ||
| /// in the call to `next` that yields the maximum value, as the range must be | ||
| /// set to a state to yield the next value. | ||
| /// the overflow checks profile (panic in debug, wrap in release). Unlike | ||
| /// its legacy counterpart, the iterator will only panic after yielding the | ||
| /// maximum value when overflow checks are enabled. |
There was a problem hiding this comment.
Do we have a test for this?
There was a problem hiding this comment.
Yes: rangefrom-overflow-overflow-checks and friends
| /// Returns the remainder of the range being iterated over. | ||
| #[inline] | ||
| #[rustc_inherit_overflow_checks] | ||
| #[unstable(feature = "new_range_api", issue = "125687")] | ||
| #[stable(feature = "new_range_from_api", since = "CURRENT_RUSTC_VERSION")] | ||
| pub fn remainder(self) -> RangeFrom<A> { |
There was a problem hiding this comment.
This could probably use an example
There was a problem hiding this comment.
Added examples for RangeInclusive::remainder, RangeFrom::remainder, and Range::remainder
|
It doesn't look like @rustbot label +I-libs-api-nominated The current |
|
Noticing that |
|
|
This comment has been minimized.
This comment has been minimized.
Accepted in an RFC doesn’t mean we don’t want to adjust or defer it at stabilization time. It’s probably fine here, but worth confirming since it wasn’t explicitly mentioned anywhere. |
|
This was discussed in today's @rust-lang/libs-api meeting and we approved the stabilization, including @rustbot label -I-libs-api-nominated |
|
@rustbot author Just needs a rebase |
|
Reminder, once the PR becomes ready for a review, use |
8a511b5 to
d404c58
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
r=me after #154191 merges (I think there will be a small conflict)
|
I think the |
This comment has been minimized.
This comment has been minimized.
d404c58 to
abd853d
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
@bors r=tgross35 |
|
@pitaj: 🔑 Insufficient privileges: not in review users |
|
@rustbot ready |
Seems worth checking, asked about this on Zulip #t-libs-api/api-changes > `RangeFrom::remainder` possible panic |
|
Seems like the Zulip thread brought up some previously unmentioned concerns, so renominating this. This is only about @rustbot label +I-libs-api-nominated |
Still applies, if you can drop |
abd853d to
6209a93
Compare
|
Removed |
This comment has been minimized.
This comment has been minimized.
stabilizes `core::range::RangeFrom` stabilizes `core::range::RangeFromIter` add examples for `remainder` method on range iterators `RangeFromIter::remainder` was not stabilized (see issue 154458)
6209a93 to
085dff4
Compare
|
@bors r+ |
…, r=tgross35
stabilize new RangeFrom type and iterator
```rust
// in core and std
pub mod range;
// in core::range
pub struct RangeFrom<Idx> {
pub start: Idx,
}
impl<Idx: fmt::Debug> fmt::Debug for RangeFrom<Idx> { /* ... */ }
impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> {
pub const fn contains<U>(&self, item: &U) -> bool
where
Idx: [const] PartialOrd<U>,
U: ?Sized + [const] PartialOrd<Idx>;
}
impl<Idx: Step> RangeFrom<Idx> {
pub fn iter(&self) -> RangeFromIter<Idx>;
}
impl<T> const RangeBounds<T> for RangeFrom<T> { /* ... */ }
impl<T> const RangeBounds<T> for RangeFrom<&T> { /* ... */ }
impl<T> const From<RangeFrom<T>> for legacy::RangeFrom<T> { /* ... */ }
impl<T> const From<legacy::RangeFrom<T>> for RangeFrom<T> { /* ... */ }
pub struct RangeFromIter<A>(/* ... */);
// `RangeFromIter::remainder` left unstable
impl<A: Step> Iterator for RangeFromIter<A> {
type Item = A;
/* ... */
}
impl<A: Step> FusedIterator for RangeFromIter<A> { }
impl<A: Step> IntoIterator for RangeFrom<A> {
type Item = A;
type IntoIter = RangeFromIter<A>;
/* ... */
}
unsafe impl<T> const SliceIndex<[T]> for range::RangeFrom<usize> {
type Output = [T];
/* ... */
}
unsafe impl const SliceIndex<str> for range::RangeFrom<usize> {
type Output = str;
/* ... */
}
impl ops::Index<range::RangeFrom<usize>> for CStr {
type Output = CStr;
/* ... */
}
```
Tracking issue: rust-lang#125687
…uwer Rollup of 9 pull requests Successful merges: - #150752 (Update libc to v0.2.183) - #153380 (stabilize new RangeFrom type and iterator) - #153834 (Merge `fabsf16/32/64/128` into `fabs::<F>`) - #154043 (simd_fmin/fmax: make semantics and name consistent with scalar intrinsics) - #154494 (triagebot: add reminder for bumping CI LLVM stamp) - #153374 (Fix LegacyKeyValueFormat report from docker build: dist-x86_64) - #154320 (`trim_prefix` for paths) - #154453 (Fix ice in rustdoc of private reexport) - #154515 (Notify stdarch maintainers on changes in std_detect)
Rollup of 9 pull requests Successful merges: - #153380 (stabilize new RangeFrom type and iterator) - #153834 (Merge `fabsf16/32/64/128` into `fabs::<F>`) - #154043 (simd_fmin/fmax: make semantics and name consistent with scalar intrinsics) - #154494 (triagebot: add reminder for bumping CI LLVM stamp) - #153374 (Fix LegacyKeyValueFormat report from docker build: dist-x86_64) - #154320 (`trim_prefix` for paths) - #154453 (Fix ice in rustdoc of private reexport) - #154504 (move many tests from `structs-enums` to `structs` or `enum`) - #154515 (Notify stdarch maintainers on changes in std_detect)
Rollup merge of #153380 - pitaj:stabilize-new_range_from_api, r=tgross35 stabilize new RangeFrom type and iterator ```rust // in core and std pub mod range; // in core::range pub struct RangeFrom<Idx> { pub start: Idx, } impl<Idx: fmt::Debug> fmt::Debug for RangeFrom<Idx> { /* ... */ } impl<Idx: PartialOrd<Idx>> RangeFrom<Idx> { pub const fn contains<U>(&self, item: &U) -> bool where Idx: [const] PartialOrd<U>, U: ?Sized + [const] PartialOrd<Idx>; } impl<Idx: Step> RangeFrom<Idx> { pub fn iter(&self) -> RangeFromIter<Idx>; } impl<T> const RangeBounds<T> for RangeFrom<T> { /* ... */ } impl<T> const RangeBounds<T> for RangeFrom<&T> { /* ... */ } impl<T> const From<RangeFrom<T>> for legacy::RangeFrom<T> { /* ... */ } impl<T> const From<legacy::RangeFrom<T>> for RangeFrom<T> { /* ... */ } pub struct RangeFromIter<A>(/* ... */); // `RangeFromIter::remainder` left unstable impl<A: Step> Iterator for RangeFromIter<A> { type Item = A; /* ... */ } impl<A: Step> FusedIterator for RangeFromIter<A> { } impl<A: Step> IntoIterator for RangeFrom<A> { type Item = A; type IntoIter = RangeFromIter<A>; /* ... */ } unsafe impl<T> const SliceIndex<[T]> for range::RangeFrom<usize> { type Output = [T]; /* ... */ } unsafe impl const SliceIndex<str> for range::RangeFrom<usize> { type Output = str; /* ... */ } impl ops::Index<range::RangeFrom<usize>> for CStr { type Output = CStr; /* ... */ } ``` Tracking issue: #125687
Rollup of 9 pull requests Successful merges: - rust-lang/rust#153380 (stabilize new RangeFrom type and iterator) - rust-lang/rust#153834 (Merge `fabsf16/32/64/128` into `fabs::<F>`) - rust-lang/rust#154043 (simd_fmin/fmax: make semantics and name consistent with scalar intrinsics) - rust-lang/rust#154494 (triagebot: add reminder for bumping CI LLVM stamp) - rust-lang/rust#153374 (Fix LegacyKeyValueFormat report from docker build: dist-x86_64) - rust-lang/rust#154320 (`trim_prefix` for paths) - rust-lang/rust#154453 (Fix ice in rustdoc of private reexport) - rust-lang/rust#154504 (move many tests from `structs-enums` to `structs` or `enum`) - rust-lang/rust#154515 (Notify stdarch maintainers on changes in std_detect)
View all comments
Tracking issue: #125687
r? tgross