Commit Graph

219 Commits

Author SHA1 Message Date
Boxy 7bc34622f0 tidy 2025-08-06 16:55:50 +01:00
Scott McMurray eee28138b8 Use as_array in PartialEq for arrays 2025-08-03 12:47:11 -07:00
Evgenii Zheltonozhskii 3c76e3d002 Constify Try, From, TryFrom 2025-07-21 12:49:45 +03:00
Oli Scherer 2b4ede7e3d constify Index trait and its slice impls 2025-07-15 08:27:15 +00:00
Marijn Schouten d3f2e2ec6e simplify receivers for some array method calls 2025-07-03 14:39:27 +00:00
Josh Stone 9ce8930da6 Update version placeholders 2025-07-01 10:54:33 -07:00
Deadbeef 62435f922a impl Default for array::IntoIter 2025-05-26 15:21:03 +08:00
Guillaume Gomez 07157b78b1 Rollup merge of #140066 - thaliaarchi:const-array-as-mut-slice, r=jhpratt
Stabilize `<[T; N]>::as_mut_slice` as `const`

This is trivial and has no design questions.

Tracked in https://github.com/rust-lang/rust/issues/133333.

r? libs-api
2025-05-24 21:23:47 +02:00
Julian Knodt ab1c49a7fa Add #[must_use] to Array::map
The output of Array::map is intended to be an array of the same size, and does not modify the
original in place nor is it intended for side-effects. Thus, under normal circumstances it should be consumed.

See [discussion](https://internals.rust-lang.org/t/array-map-annotate-with-must-use/22813/26).

Attaching to tracking issue #75243
2025-05-13 12:34:53 +09:00
Thalia Archibald 38c5545244 Stabilize <[T; N]>::as_mut_slice as const 2025-04-20 02:13:34 -07:00
bors 1bc56185ee Auto merge of #139430 - scottmcm:polymorphic-array-into-iter, r=cuviper
Polymorphize `array::IntoIter`'s iterator impl

Today we emit all the iterator methods for every different array width.  That's wasteful since the actual array length never even comes into it -- the indices used are from the separate `alive: IndexRange` field, not even the `N` const param.

This PR switches things so that an `array::IntoIter<T, N>` stores a `PolymorphicIter<[MaybeUninit<T>; N]>`, which we *unsize* to `PolymorphicIter<[MaybeUninit<T>]>` and call methods on that non-`Sized` type for all the iterator methods.

That also necessarily makes the layout consistent between the different lengths of arrays, because of the unsizing.  Compare that to today <https://rust.godbolt.org/z/Prb4xMPrb>, where different widths can't even be deduped because the offset to the indices is different for different array widths.
2025-04-11 23:21:31 +00:00
Scott McMurray 4207c786e7 PR feedback 2025-04-09 21:44:59 -07:00
Scott McMurray e30cb329d8 Polymorphize array::IntoIter's iterator impl 2025-04-05 17:55:24 -07:00
Scott McMurray 6a915967f1 Promise array::from_fn in generated in order of increasing indices 2025-03-29 01:06:43 -07: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
Matthias Krüger a3fb2a0572 Rollup merge of #135489 - RalfJung:TryFromSliceError, r=tgross35
remove pointless allowed_through_unstable_modules on TryFromSliceError

This got added in https://github.com/rust-lang/rust/pull/132482 but the PR does not explain why. `@lukas-code` do you still remember? Also Cc `@Noratrieb` as reviewer of that PR.

If I understand the issue description correctly, all paths under which this type is exported are stable now: `core::array::TryFromSliceError` and `std::array::TryFromSliceError`. If that is the case, we shouldn't have the attribute; it's a terrible hack that should only be used when needed to maintain backward compatibility. Getting some historic information right is IMO *not* sufficient justification to risk accidentally exposing this type via more unstable paths today or in the future.
2025-01-24 08:08:06 +01:00
Urgau 8e61502484 core: add #![warn(unreachable_pub)] 2025-01-20 18:35:32 +01:00
Ralf Jung 5c2006b79a remove pointless allowed_through_unstable_modules on TryFromSliceError 2025-01-14 16:54:28 +01:00
ltdk e37daf0c86 Add inherent versions of MaybeUninit methods for slices 2025-01-11 23:57:00 -05:00
Gabriel Bjørnager Jensen 4b8ca28a1e Add '<[T]>::as_array', '<[T]>::as_mut_array', '<*const [T]>::as_array', and '<*mut [T]>::as_mut_array' conversion methods; 2024-11-26 21:49:28 +01:00
许杰友 Jieyou Xu (Joe) 8036ff1302 Rollup merge of #133332 - bjoernager:const-array-as-mut-slice, r=jhpratt
Mark `<[T; N]>::as_mut_slice` with the `const` specifier.

Tracking issue: #133333

`<[T; N]>::as_mut_slice` can have the `const` specifier without any changes to the function body.
2024-11-23 20:19:54 +08:00
Gabriel Bjørnager Jensen c85a742cb1 Mark '<[T; N]>::as_mut_slice' as 'const'; 2024-11-22 09:49:30 +01:00
Gabriel Bjørnager Jensen 7c799c3e0d Mark and implement 'each_ref' and 'each_mut' in '[T; N]' as const; 2024-11-21 12:27:18 +01:00
bors 67395551d0 Auto merge of #132458 - RalfJung:rustc-const-unstable, r=Amanieu
get rid of a whole bunch of unnecessary rustc_const_unstable attributes

In general, when a `const fn` is still unstable, it doesn't need a `#[rustc_const_unstable]` attribute. The only exception is functions that internally use things that can't be used in stable const fn yet.

So this gets rid of a whole bunch of `#[rustc_const_unstable]` in libcore.
2024-11-03 02:32:48 +00:00
Ralf Jung 66351a6184 get rid of a whole bunch of unnecessary rustc_const_unstable attributes 2024-11-02 09:59:55 +01:00
Lukas Markeffsky 2a6a70606d fix some stability annotations 2024-11-02 01:37:45 +01:00
Josh Stone acb09bf741 update bootstrap configs 2024-10-15 20:30:23 -07:00
Josh Stone f204e2c23b replace placeholder version
(cherry picked from commit 567fd9610c)
2024-10-15 20:13:55 -07:00
Trevor Gross 19f6c17df4 Stabilize const_option
This makes the following API stable in const contexts:

    impl<T> Option<T> {
        pub const fn as_mut(&mut self) -> Option<&mut T>;
        pub const fn expect(self, msg: &str) -> T;
        pub const fn unwrap(self) -> T;
        pub const unsafe fn unwrap_unchecked(self) -> T;
        pub const fn take(&mut self) -> Option<T>;
        pub const fn replace(&mut self, value: T) -> Option<T>;
    }

    impl<T> Option<&T> {
        pub const fn copied(self) -> Option<T>
        where T: Copy;
    }

    impl<T> Option<&mut T> {
        pub const fn copied(self) -> Option<T>
        where T: Copy;
    }

    impl<T, E> Option<Result<T, E>> {
        pub const fn transpose(self) -> Result<Option<T>, E>
    }

    impl<T> Option<Option<T>> {
        pub const fn flatten(self) -> Option<T>;
    }

The following functions make use of the unstable
`const_precise_live_drops` feature:

- `expect`
- `unwrap`
- `unwrap_unchecked`
- `transpose`
- `flatten`

Fixes: <https://github.com/rust-lang/rust/issues/67441>
2024-10-12 17:07:13 -04:00
ultrabear 461b49d96d stabilize {slice,array}::from_mut 2024-10-09 00:38:01 -07:00
Michael Goulet c682aa162b Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
ranger-ross cbf92fcf39 Fixed more typos in library/core 2024-08-31 14:57:38 +09:00
burlinchen bca0c5f2a9 fix: Ensure Guard's drop method is removed at opt-level=s for Copy types
Added `#[inline]` to the `drop` method in the `Guard` implementation to ensure that the method is removed by the compiler at optimization level `opt-level=s` for `Copy` types. This change aims to align the method's behavior with optimization expectations and ensure it does not affect performance.
2024-08-09 11:10:30 +08:00
Nicholas Nethercote 84ac80f192 Reformat use declarations.
The previous commit updated `rustfmt.toml` appropriately. This commit is
the outcome of running `x fmt --all` with the new formatting options.
2024-07-29 08:26:52 +10:00
John Arundel a19472a93e Fix doc nits
Many tiny changes to stdlib doc comments to make them consistent (for example
"Returns foo", rather than "Return foo", per RFC1574), adding missing periods, paragraph
breaks, backticks for monospace style, and other minor nits.

https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text
2024-07-26 13:26:33 +01:00
Kevin Reid 13fca73f49 Replace MaybeUninit::uninit_array() with array repeat expression.
This is possible now that inline const blocks are stable; the idea was
even mentioned as an alternative when `uninit_array()` was added:
<https://github.com/rust-lang/rust/pull/65580#issuecomment-544200681>

> if it’s stabilized soon enough maybe it’s not worth having a
> standard library method that will be replaceable with
> `let buffer = [MaybeUninit::<T>::uninit(); $N];`

Const array repetition and inline const blocks are now stable (in the
next release), so that circumstance has come to pass, and we no longer
have reason to want `uninit_array()` other than convenience. Therefore,
let’s evaluate the inconvenience by not using `uninit_array()` in
the standard library, before potentially deleting it entirely.
2024-06-24 10:23:50 -07:00
joboet e1aacea74d core: add tracking issue for array::repeat 2024-06-19 17:48:00 +02:00
joboet 39a918002e core: simplify implementation of array::repeat, address other nits 2024-06-19 17:29:54 +02:00
joboet 3d4f8b1f45 core: implement array::repeat 2024-06-19 17:29:53 +02:00
Jubilee Young d6955445f5 Simplify [T; N]::try_map signature
People keep making fun of this signature for being so gnarly.
Associated type bounds lend it a much simpler scribbling.
ChangeOutputType can also come along for the ride.
2024-06-11 01:50:43 -07:00
Michael Goulet a502e7ac1d Implement BOXED_SLICE_INTO_ITER 2024-05-20 19:21:30 -04:00
Markus Reiter 33e68aadc9 Stabilize generic NonZero. 2024-04-22 18:48:47 +02:00
Daniel Paoliello d261647c93 Import the 2021 prelude in the core crate 2024-03-25 13:12:06 -07:00
Konrad Höffner 533add895c add missing PartialOrd impl doc for array 2024-03-06 10:28:56 +01:00
Markus Reiter 14ed426eec Use generic NonZero everywhere in core. 2024-02-22 15:17:33 +01:00
Markus Reiter a90cc05233 Replace NonZero::<_>::new with NonZero::new. 2024-02-15 08:09:42 +01:00
Markus Reiter 746a58d435 Use generic NonZero internally. 2024-02-15 08:09:42 +01:00
Mark Rousskov 8043821b3a Bump version placeholders 2024-02-08 07:43:38 -05:00
Matthias Krüger 2624bfbc0d Rollup merge of #120384 - wackbyte:array-equality-generics, r=Mark-Simulacrum
Use `<T, U>` for array/slice equality `impl`s

Makes the trait implementation documentation for arrays and slices appear more consistent.

[Example](https://doc.rust-lang.org/1.75.0/std/primitive.array.html): mixed `A`, `B`, and `U`.
![List of PartialEq implementations for arrays](https://github.com/wackbyte/rust/assets/29505620/823c010e-ee57-4de1-885b-a1cd6dcaf85f)

This change makes them all `U`.
2024-02-05 11:07:27 +01:00
Matthias Krüger c9ab37bf4f Rollup merge of #103522 - Dylan-DPC:76118/array-methods-stab, r=dtolnay
stabilise array methods

Closes #76118

Stabilises the remaining array methods

FCP is yet to be carried out for this

There wasn't a clear consensus on the naming, but all the other alternatives had some flaws as discussed in the tracking issue and there was a silence on this issue for a year
2024-01-26 23:15:47 +01:00