okaneco
59ca7679c7
slice: Remove some uses of unsafe in first/last chunk methods
...
Remove unsafe `split_at_unchecked` and `split_at_mut_unchecked`
in some slice `split_first_chunk`/`split_last_chunk` methods.
Replace those calls with the safe `split_at` and `split_at_checked` where
applicable.
Add codegen tests to check for no panics when calculating the last
chunk index using `checked_sub` and `split_at`
2025-03-30 12:45:04 -04:00
Matthias Krüger
2df731d586
Rollup merge of #138540 - okaneco:const_split_off_first_last, r=m-ou-se
...
core/slice: Mark some `split_off` variants unstably const
Tracking issue: #138539
Add feature gate `#![feature(const_split_off_first_last)]`
Mark `split_off_first`, `split_off_first_mut`, `split_off_last`, and `split_off_last_mut` slice methods unstably const
2025-03-19 16:52:55 +01:00
许杰友 Jieyou Xu (Joe)
e0846806db
Rollup merge of #138082 - thaliaarchi:slice-cfg-not-test, r=thomcc
...
Remove `#[cfg(not(test))]` gates in `core`
These gates are unnecessary now that unit tests for `core` are in a separate package, `coretests`, instead of in the same files as the source code. They previously prevented the two `core` versions from conflicting with each other.
2025-03-16 09:40:05 +08:00
okaneco
e1388bfb03
core/slice: Mark some split_off variants unstably const
...
Introduce feature `const_split_off_first_last`
Mark `split_off_first`, `split_off_first_mut`, `split_off_last`, and
`split_off_last_mut` unstably const
2025-03-15 14:21:47 -04:00
Matthias Krüger
b834632071
Rollup merge of #138034 - thaliaarchi:use-prelude-size-of, r=tgross35
...
library: Use `size_of` from the prelude instead of imported
Use `std::mem::{size_of, size_of_val, align_of, align_of_val}` from the prelude instead of importing or qualifying them.
These functions were added to all preludes in Rust 1.80.
try-job: test-various
try-job: x86_64-gnu
try-job: x86_64-msvc-1
2025-03-07 10:12:44 +01:00
Thalia Archibald
988eb19970
library: Use size_of from the prelude instead of imported
...
Use `std::mem::{size_of, size_of_val, align_of, align_of_val}` from the
prelude instead of importing or qualifying them.
These functions were added to all preludes in Rust 1.80.
2025-03-06 20:20:38 -08:00
Thalia Archibald
638b226a6a
Remove #[cfg(not(test))] gates in core
...
These gates are unnecessary now that unit tests for `core` are in a
separate package, `coretests`, instead of in the same files as the
source code. They previously prevented the two `core` versions from
conflicting with each other.
2025-03-06 13:21:59 -08:00
okaneco
d4c0c94577
Stabilize const_copy_from_slice feature
...
Stabilizes `copy_from_slice` method on `[T]`
2025-03-06 07:32:52 -05:00
Taylor Cramer
a8bff87cfb
Stabilize [T]::split_off... methods
...
This was previously known as the slice_take feature.
2025-02-28 14:04:54 -08:00
Trevor Gross
91dc3eed50
Rollup merge of #137516 - RalfJung:rustc_const_unstable-cleanup, r=Amanieu
...
remove some unnecessary rustc_const_unstable
If the function is anyway unstable, it doesn't need to be `rustc_const_unstable`.
`copy_from_slice` turns out to not do anything const-unstable itself, we just haven't stably committed to it being available in const yet. See [here](https://rustc-dev-guide.rust-lang.org/stability.html?highlight=rustc_const_stable_indirect ) for more details on the `rustc_const_stable_indirect` attribute.
2025-02-24 18:46:37 -05:00
Ralf Jung
68543abb45
remove some unnecessary rustc_const_unstable
2025-02-24 08:54:53 +01:00
Jacob Pratt
8a8c0e25c9
Rollup merge of #137484 - chenyukang:yukang-fix-sort-doc, r=Noratrieb
...
Fix documentation for unstable sort on slice
Fixes #136665
2025-02-24 02:11:35 -05:00
yukang
1a440d56d6
Fix documentation for unstable sort
2025-02-23 22:29:53 +08:00
bors
b880760977
Auto merge of #137237 - cuviper:stage0, r=Mark-Simulacrum
...
Master bootstrap update
https://forge.rust-lang.org/release/process.html#master-bootstrap-update-tuesday
r? `@Mark-Simulacrum`
2025-02-23 11:12:56 +00:00
Matthias Krüger
2c380a4661
Rollup merge of #134995 - DaniPopes:stable-const_slice_flatten, r=Amanieu
...
Stabilize const_slice_flatten
Const-stabilizes `slice::as_flattened{,_mut}`:
```rust
// core::slice
impl<T, const N: usize> [[T; N]] {
pub const fn as_flattened(&self) -> &[T];
pub const fn as_flattened_mut(&mut self) -> &mut [T];
}
```
Tracking issue: https://github.com/rust-lang/rust/issues/95629
Requires separate FCP, as per https://github.com/rust-lang/rust/issues/95629#issuecomment-2566546257 .
Closes https://github.com/rust-lang/rust/issues/95629 .
`````@rustbot````` modify labels: +T-libs-api
Happy new year!
2025-02-19 18:52:03 +01:00
Josh Stone
fdba8a7c47
update version placeholders
...
(cherry picked from commit e4840ce59bdddb19394df008c5c26d9c493725f8)
2025-02-18 08:50:21 -08:00
bors
a567209daa
Auto merge of #134633 - GrigorenkoPV:get_disjoint_mut, r=cuviper
...
Stabilize `get_many_mut` as `get_disjoint_mut`
Tracking issue: #104642
Closes #104642
FCP completed in https://github.com/rust-lang/rust/issues/104642#issuecomment-2558161073
2025-02-13 21:09:31 +00:00
Taylor Cramer
836a989820
Add OneSidedRangeBound to eliminate panic in split_point_of
...
See discussion in https://github.com/rust-lang/rust/pull/88502/files#r760177240
2025-02-04 11:45:21 -08:00
Taylor Cramer
07cf20e987
Rename slice::take methods to split_off
2025-02-04 11:09:17 -08:00
Pavel Grigorenko
1abc853562
Stabilize get_many_mut as get_disjoint_mut
...
* Renames the methods:
* `get_many_mut` -> `get_disjoint_mut`
* `get_many_unchecked_mut` -> `get_disjoint_unchecked_mut`
* Does not rename the feature flag: `get_many_mut`
* Marks the feature as stable
* Renames some helper stuff:
* `GetManyMutError` -> `GetDisjointMutError`
* `GetManyMutIndex` -> `GetDisjointMutIndex`
* `get_many_mut_helpers` -> `get_disjoint_mut_helpers`
* `get_many_check_valid` -> `get_disjoint_check_valid`
This only touches slice methods.
HashMap's methods and feature gates are not renamed here
(nor are they stabilized).
2025-01-28 17:59:31 +03:00
Marijn Schouten
f630f7f410
Clarify WindowsMut (Lending)Iterator
...
fixes 133628
2025-01-27 10:53:58 +01:00
bors
678e669cc4
Auto merge of #134976 - mgsloan:improve-select-nth-unstable-docs, r=ibraheemdev
...
Improve `select_nth_unstable` documentation clarity
* Instead uses `before` and `after` variable names in the example
where `greater` and `lesser` are flipped.
* Uses `<=` and `>=` instead of "less than or equal to" and "greater
than or equal to" to make the docs more concise.
* General attempt to remove unnecessary words and be more precise. For
example it seems slightly wrong to say "its final sorted position",
since this implies there is only one sorted position for this element.
2025-01-19 08:50:12 +00:00
Michael Sloan
3a6eea0c6a
Rewrap following accepting review suggestions from @ibraheemdev
2025-01-18 18:40:16 -07:00
Michael Sloan
fd89cf9b8f
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:35:41 -07:00
Michael Sloan
6ac44fa5fa
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:35:22 -07:00
Michael Sloan
c0aa7b5cf0
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:35:12 -07:00
Michael Sloan
de7f1b670b
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:34:29 -07:00
Michael Sloan
a3c65805ad
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:34:21 -07:00
Michael Sloan
2eef440c22
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:33:42 -07:00
Michael Sloan
a506f9d210
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:33:33 -07:00
Michael Sloan
305bd856b2
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:33:23 -07:00
Michael Sloan
d39d0ecd57
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:33:02 -07:00
Michael Sloan
ecf68f3cd0
Update library/core/src/slice/mod.rs
...
Co-authored-by: Ibraheem Ahmed <ibraheem@ibraheem.ca >
2025-01-18 18:32:47 -07:00
Michael Sloan
0257cfb974
then be -> be based on feedback from @ibraheemdev
2025-01-18 14:52:16 -07:00
Ben Kimock
cda566e226
Add #[inline] to copy_from_slice
2025-01-11 18:00:44 -05:00
Pietro Albini
4ae92b7adb
update version placeholders
2025-01-08 20:02:18 +01:00
Jacob Pratt
0f9f91cccf
Rollup merge of #135121 - okaneco:const_slice_reverse, r=jhpratt
...
Mark `slice::reverse` unstably const
Tracking issue #135120
This is unblocked by the stabilization of `const_swap`
2025-01-05 18:35:05 -05:00
okaneco
03c2ac248f
Mark slice::reverse unstably const
2025-01-05 08:01:50 -05:00
Matthias Krüger
695da5b782
Rollup merge of #133964 - joboet:select_unpredictable, r=tgross35
...
core: implement `bool::select_unpredictable`
Tracking issue: #133962
ACP: https://github.com/rust-lang/libs-team/issues/468
2025-01-04 09:54:36 +01:00
DaniPopes
7de250f1e3
Stabilize const_slice_flatten
...
Const-stabilizes `slice::as_flattened{,_mut}`:
```rust
// core::slice
impl<T, const N: usize> [[T; N]] {
pub const fn as_flattened(&self) -> &[T];
pub const fn as_flattened_mut(&mut self) -> &mut [T];
}
```
Tracking issue: https://github.com/rust-lang/rust/issues/95629
Requires separate libs-api FCP, as per https://github.com/rust-lang/rust/issues/95629#issuecomment-2566546257 .
Closes https://github.com/rust-lang/rust/issues/95629 .
2025-01-01 15:25:21 +01:00
Michael Sloan
217e10a70c
Improve select_nth_unstable documentation clarity
...
* Instead uses `before` and `after` variable names in the example
where `greater` and `lesser` are flipped.
* Uses `<=` and `>=` instead of "less than or equal to" and "greater
than or equal to" to make the docs more concise.
* General attempt to remove unnecessary words and be more precise. For
example it seems slightly wrong to say "its final sorted position",
since this implies there is only one sorted position for this element.
2024-12-31 15:59:28 -07:00
Stuart Cook
1200d3d733
Rollup merge of #134927 - DaniPopes:const-as_flattened_mut, r=scottmcm
...
Make slice::as_flattened_mut unstably const
Tracking issue: https://github.com/rust-lang/rust/issues/95629
Unblocked by const_mut_refs being stabilized: https://github.com/rust-lang/rust/pull/129195
2024-12-31 14:12:46 +11:00
DaniPopes
26f523edfc
Make slice::as_flattened_mut unstably const
...
Tracking issue: https://github.com/rust-lang/rust/issues/95629
Unblocked by const_mut_refs being stabilized: https://github.com/rust-lang/rust/pull/129195
2024-12-30 18:16:49 +01:00
Ralf Jung
6de3a2e3a9
stabilize const_swap
2024-12-25 10:36:32 +01:00
Jacob Pratt
1ec6d093b7
Rollup merge of #132830 - wr7:substr_range_documentation, r=tgross35
...
Rename `elem_offset` to `element_offset`
Tracking issue: #126769
Renames `slice::elem_offset` to `slice::element_offset` and improves the documentation of it and its related methods.
The current documentation can be misinterpreted (as explained [here](https://github.com/rust-lang/rust/issues/126769#issuecomment-2453363897 )).
2024-12-20 01:36:46 -05:00
tkirishima
6d5c591405
Replace i32 by char in split_at & _unchecked
2024-12-14 14:25:55 +00:00
Matthias Krüger
2e60288ce0
Rollup merge of #133598 - ChayimFriedman2:get-many-mut-detailed-err, r=scottmcm
...
Change `GetManyMutError` to match T-libs-api decision
That is, differentiate between out-of-bounds and overlapping indices, and remove the generic parameter `N`.
I also exported `GetManyMutError` from `alloc` (and `std`), which was apparently forgotten.
Changing the error to carry additional details means LLVM no longer generates separate short-circuiting branches for the checks, instead it generates one branch at the end. I therefore changed the code to use early returns to make LLVM generate jumps. Benchmark results between the approaches are somewhat mixed, but I chose this approach because it is significantly faster with ranges and also faster with `unwrap()`.
Benchmark (`jumps` refer to short-circuiting, `acc` is not short-circuiting):
```rust
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use my_crate::{get_many_check_valid_acc, get_many_check_valid_jumps, GetManyMutError};
mod externs {
#[unsafe(no_mangle)]
fn foo() {}
#[unsafe(no_mangle)]
fn bar() {}
#[unsafe(no_mangle)]
fn baz() {}
}
unsafe extern "C" {
safe fn foo();
safe fn bar();
safe fn baz();
}
fn bench_method(c: &mut Criterion) {
c.bench_function("jumps two usize", |b| {
b.iter(|| get_many_check_valid_jumps(&[black_box(1), black_box(5)], black_box(10)))
});
c.bench_function("jumps two usize unwrap", |b| {
b.iter(|| get_many_check_valid_jumps(&[black_box(1), black_box(5)], black_box(10)).unwrap())
});
c.bench_function("jumps two usize ok", |b| {
b.iter(|| get_many_check_valid_jumps(&[black_box(1), black_box(5)], black_box(10)).ok())
});
c.bench_function("jumps three usize", |b| {
b.iter(|| {
get_many_check_valid_jumps(&[black_box(1), black_box(5), black_box(7)], black_box(10))
})
});
c.bench_function("jumps three usize match", |b| {
b.iter(|| {
match get_many_check_valid_jumps(
&[black_box(1), black_box(5), black_box(7)],
black_box(10),
) {
Err(GetManyMutError::IndexOutOfBounds) => foo(),
Err(GetManyMutError::OverlappingIndices) => bar(),
Ok(()) => baz(),
}
})
});
c.bench_function("jumps two Range", |b| {
b.iter(|| {
get_many_check_valid_jumps(
&[black_box(1)..black_box(5), black_box(7)..black_box(8)],
black_box(10),
)
})
});
c.bench_function("jumps two RangeInclusive", |b| {
b.iter(|| {
get_many_check_valid_jumps(
&[black_box(1)..=black_box(5), black_box(7)..=black_box(8)],
black_box(10),
)
})
});
c.bench_function("acc two usize", |b| {
b.iter(|| get_many_check_valid_acc(&[black_box(1), black_box(5)], black_box(10)))
});
c.bench_function("acc two usize unwrap", |b| {
b.iter(|| get_many_check_valid_acc(&[black_box(1), black_box(5)], black_box(10)).unwrap())
});
c.bench_function("acc two usize ok", |b| {
b.iter(|| get_many_check_valid_acc(&[black_box(1), black_box(5)], black_box(10)).ok())
});
c.bench_function("acc three usize", |b| {
b.iter(|| {
get_many_check_valid_acc(&[black_box(1), black_box(5), black_box(7)], black_box(10))
})
});
c.bench_function("acc three usize match", |b| {
b.iter(|| {
match get_many_check_valid_jumps(
&[black_box(1), black_box(5), black_box(7)],
black_box(10),
) {
Err(GetManyMutError::IndexOutOfBounds) => foo(),
Err(GetManyMutError::OverlappingIndices) => bar(),
Ok(()) => baz(),
}
})
});
c.bench_function("acc two Range", |b| {
b.iter(|| {
get_many_check_valid_acc(
&[black_box(1)..black_box(5), black_box(7)..black_box(8)],
black_box(10),
)
})
});
c.bench_function("acc two RangeInclusive", |b| {
b.iter(|| {
get_many_check_valid_acc(
&[black_box(1)..=black_box(5), black_box(7)..=black_box(8)],
black_box(10),
)
})
});
}
criterion_group!(benches, bench_method);
criterion_main!(benches);
```
Benchmark results:
```none
jumps two usize time: [586.44 ps 590.20 ps 594.50 ps]
jumps two usize unwrap time: [390.44 ps 393.63 ps 397.44 ps]
jumps two usize ok time: [585.52 ps 591.74 ps 599.38 ps]
jumps three usize time: [976.51 ps 983.79 ps 991.51 ps]
jumps three usize match time: [390.82 ps 393.80 ps 397.07 ps]
jumps two Range time: [1.2583 ns 1.2640 ns 1.2695 ns]
jumps two RangeInclusive time: [1.2673 ns 1.2770 ns 1.2877 ns]
acc two usize time: [592.63 ps 596.44 ps 600.52 ps]
acc two usize unwrap time: [582.65 ps 587.07 ps 591.90 ps]
acc two usize ok time: [581.59 ps 587.82 ps 595.71 ps]
acc three usize time: [894.69 ps 901.23 ps 908.24 ps]
acc three usize match time: [392.68 ps 395.73 ps 399.17 ps]
acc two Range time: [1.5531 ns 1.5617 ns 1.5711 ns]
acc two RangeInclusive time: [1.5746 ns 1.5840 ns 1.5939 ns]
```
2024-12-11 20:00:14 +01:00
joboet
49d76b8d0e
core: use public method instead of instrinsic
2024-12-09 13:27:06 +01:00
Guillaume Gomez
1638a5514b
Rollup merge of #133743 - bjoernager:slice-as-array, r=joboet
...
Fix docs for `<[T]>::as_array`.
Tracking issue: #133508
This PR fixes a small typographical error in the docs entry for `<[T]>::as_array`.
2024-12-02 17:36:08 +01:00
bors
3bff51ea91
Auto merge of #133728 - jhpratt:rollup-k1i60pg, r=jhpratt
...
Rollup of 4 pull requests
Successful merges:
- #133589 (Remove `hir::ArrayLen`)
- #133672 (Remove a bunch of unnecessary const stability noise)
- #133678 (Stabilize `ptr::fn_addr_eq`)
- #133727 (Update mailmap)
r? `@ghost`
`@rustbot` modify labels: rollup
2024-12-02 12:17:12 +00:00