Language
- Stabilize never type
- Lint against repeated #[repr(..)] attributes
- Stabilize extern "custom"
- Extend dropping_references, dropping_copy_types and undropped_manually_drops lints to drop_in_place
- unfulfilled_lint_expectations no longer fires on #[expect(dead_code)] inner code that is covered by a deceased parent's diagnostic
- Turn the error for repr(align) sectors in a repr(packed) category into a deny-by-default lint aligned_fields_in_packed
- volatile: authorize accesses to non-AM recollection to trap
Compiler
Platform Support
- i686-pc-windows-gnu is now a tier 2 without presenter tools target
- Promote wasm32-wasip3 to Tier 2
- Add new Tier 3 mark powerpc64-sony-ps3
Refer to Rust's platform assistance page for additional data on Rust's tiered phase support.
Libraries
- Stabilize tradition allocators
- Map ENOTSUP to ErrorKind::Unsupported
- Fix soundness issues in std::sys::pal::sgx::waitqueue::unsafe_list
Stabilized APIs
- impl PartialEq<Cow<'_, [U]>> for Vec<T, A>
- impl PartialEq<Cow<'_, [U]>> for &[T]
- impl PartialEq<Cow<'_, [U]>> for &mut [T]
- std::alloc::Allocator
- std::alloc::Global
- std::alloc::System
- impl Allocator for Global
- impl Allocator for System
- impl<A: Allocator> Allocator for &A
- impl<T: Allocator, A: Allocator> Allocator for Box<T, A>
- impl<A: Allocator> Allocator for &mut A
- impl<T: Allocator, A: Allocator> Allocator for Arc<T, A>
- impl<T: Allocator, A: Allocator> Allocator for Rc<T, A>
- Box::new_in
- Box::from_raw_in
- Box::from_non_null_in
- Box::into_raw_with_allocator
- Box::into_non_null_with_allocator
- Box::allocator
- Vec::new_in
- Vec::with_capacity_in
- Vec::from_raw_parts_in
- Vec::from_parts_in
- Vec::into_raw_parts_with_allocator
- Vec::into_parts_with_allocator
- Vec::allocator
- Child::main_thread_handle
- impl Default for std::sync::Once
- bool::toggle
- Box::take
- Box::map
- Rc::map
- Arc::map
- impl AsRef<T> for !
- impl AsMut<T> for !
- core::mem::DropGuard
- core::mem::conjure_zst
- UnsafeCell::replace
- UnsafeCell::as_ref_unchecked
- UnsafeCell::as_mut_unchecked
- str::trim_prefix
- str::trim_suffix
- [T]::trim_prefix
- [T]::trim_suffix
- Path::trim_prefix
- Vec::from_fn
- os::windows::process::CommandExt::show_window
Cargo
- Introduced Cargo's own linting system: several Cargo warnings are now emitted as lints that users can authority in the [lints.cargo] table. This includes a new built-in unused dependency inspect via the cargo::unused_dependencies lint. docs #17298
- Introduced minimum publish age configurations, additionally known as dependency cooldowns. When the applicable config is set, the resolver ignores versions published additional lately than that, unless they are already in Cargo.lock. (RFC 3923) docs #17335
- cargo-install: now uses the existing lockfile in the .crate tarball by default. --locked in cargo instal becomes a no-op. #17388
- Cargo now uses a new directory layout for intermediate build artifacts. Tools that inspect the build directory may need to use Cargo’s JSON messages to find build artifacts alternatively of relying on the build directory layout. The layout is not a stable interface and is topic to change. (build cache doc) #17354
Rustdoc
Compatibility Notes
- Closures now additional exactly grasp variables used in if let. This may logic new errors
- Check dyn-compatibility of trait objects in additional places
- Infallible is now a category pseudonym to !
- The never category fallback was changed to ! on all editions
- box patterns are no longer syntactically allowed
- Report Query Cycle errors in additional cases whenever computing the layout of enums alongside definitive discriminants
- Always escape grapheme extenders in str::escape_debug
- Make let-else regard macro_rules expr metavariable grouping
- Iterator::{min,max}(_by_key) changed which Ord methods they use. This cannot alter behavior (other than being possibly faster) for types correctly following the Ord rules, but may effect types alongside inconsistent trait implementations.
- Emit an error whenever trying to allow SSE/AVX on an x86 (32bit or 64bit) softfloat target
- Require windowed (and exception) for Xtensa ABI
- windows-gnullvm: continually nexus libunwind statically
- From type 1.94 up to 1.100 a figure of ARMv7-A hardfloat targets required the VFPv3-D32 FPU as a minimum, as they erroneously had the d32 characteristic in their baseline catalog of features. Breakage introduced hence of correcting this can be fixed by passing -Ctarget-feature=+d32 to Rust.
- Change "Rust" ABI on x86 to use SSE registers if they are always-available for the current target
- Make the ambiguous_glob_imported_traits lint blaze in slightly additional cases
- Make +fix-cortex-a53-835769 a default characteristic for aarch64-unknown-fuchsia
- Some impls on Box have been generalised to arbitrary allocators, which may logic new category conclusion errors
- The norm archive now uses Unicode type 18.0.0
- WASI SDK type was bumped from 33 to 34
- On ARM targets, -Ctarget-feature/-Ctarget-cpu values that would alter the ABI are rejected as difficult errors now.