1.82.0
版本发布时间: 2024-10-18 00:44:34
rust-lang/rust最新发布版本:1.82.0(2024-10-18 00:44:34)
Language
- Don't make statement nonterminals match pattern nonterminals
- Patterns matching empty types can now be omitted in common cases
- Enforce supertrait outlives obligations when using trait impls
-
addr_of(_mut)!
macros and the newly stabilized&raw (const|mut)
are now safe to use with all static items - size_of_val_raw: for length 0 this is safe to call
-
Reorder trait bound modifiers after
for<...>
binder in trait bounds - Stabilize opaque type precise capturing (RFC 3617)
-
Stabilize
&raw const
and&raw mut
operators (RFC 2582) - Stabilize unsafe extern blocks (RFC 3484)
-
Stabilize nested field access in
offset_of!
-
Do not require
T
to be live when dropping[T; 0]
-
Stabilize
const
operands in inline assembly -
Stabilize floating-point arithmetic in
const fn
- Stabilize explicit opt-in to unsafe attributes
- Document NaN bit patterns guarantees
Compiler
- Promote riscv64gc-unknown-linux-musl to tier 2
-
Promote Mac Catalyst targets
aarch64-apple-ios-macabi
andx86_64-apple-ios-macabi
to Tier 2, and ship them with rustup - Add tier 3 NuttX based targets for RISC-V and ARM
- Add tier 3 powerpc-unknown-linux-muslspe target
- Improved diagnostics to explain why a pattern is unreachable
-
The compiler now triggers the unreachable code warning properly for async functions that don't return/are
-> !
-
Promote
aarch64-apple-darwin
to Tier 1 -
Add Trusty OS target
aarch64-unknown-trusty
andarmv7-unknown-trusty
as tier 3 targets -
Promote
wasm32-wasip2
to Tier 2.
Libraries
Stabilized APIs
-
std::thread::Builder::spawn_unchecked
-
std::str::CharIndices::offset
-
std::option::Option::is_none_or
-
[T]::is_sorted
-
[T]::is_sorted_by
-
[T]::is_sorted_by_key
-
Iterator::is_sorted
-
Iterator::is_sorted_by
-
Iterator::is_sorted_by_key
-
std::future::Ready::into_inner
-
std::iter::repeat_n
-
impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>
-
impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>
-
impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>
-
impl Default for std::collections::binary_heap::Iter
-
impl Default for std::collections::btree_map::RangeMut
-
impl Default for std::collections::btree_map::ValuesMut
-
impl Default for std::collections::vec_deque::Iter
-
impl Default for std::collections::vec_deque::IterMut
-
Rc<T>::new_uninit
-
Rc<T>::assume_init
-
Rc<[T]>::new_uninit_slice
-
Rc<[MaybeUninit<T>]>::assume_init
-
Arc<T>::new_uninit
-
Arc<T>::assume_init
-
Arc<[T]>::new_uninit_slice
-
Arc<[MaybeUninit<T>]>::assume_init
-
Box<T>::new_uninit
-
Box<T>::assume_init
-
Box<[T]>::new_uninit_slice
-
Box<[MaybeUninit<T>]>::assume_init
-
core::arch::x86_64::_bextri_u64
-
core::arch::x86_64::_bextri_u32
-
core::arch::x86::_mm_broadcastsi128_si256
-
core::arch::x86::_mm256_stream_load_si256
-
core::arch::x86::_tzcnt_u16
-
core::arch::x86::_mm_extracti_si64
-
core::arch::x86::_mm_inserti_si64
-
core::arch::x86::_mm_storeu_si16
-
core::arch::x86::_mm_storeu_si32
-
core::arch::x86::_mm_storeu_si64
-
core::arch::x86::_mm_loadu_si16
-
core::arch::x86::_mm_loadu_si32
-
core::arch::wasm32::u8x16_relaxed_swizzle
-
core::arch::wasm32::i8x16_relaxed_swizzle
-
core::arch::wasm32::i32x4_relaxed_trunc_f32x4
-
core::arch::wasm32::u32x4_relaxed_trunc_f32x4
-
core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero
-
core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero
-
core::arch::wasm32::f32x4_relaxed_madd
-
core::arch::wasm32::f32x4_relaxed_nmadd
-
core::arch::wasm32::f64x2_relaxed_madd
-
core::arch::wasm32::f64x2_relaxed_nmadd
-
core::arch::wasm32::i8x16_relaxed_laneselect
-
core::arch::wasm32::u8x16_relaxed_laneselect
-
core::arch::wasm32::i16x8_relaxed_laneselect
-
core::arch::wasm32::u16x8_relaxed_laneselect
-
core::arch::wasm32::i32x4_relaxed_laneselect
-
core::arch::wasm32::u32x4_relaxed_laneselect
-
core::arch::wasm32::i64x2_relaxed_laneselect
-
core::arch::wasm32::u64x2_relaxed_laneselect
-
core::arch::wasm32::f32x4_relaxed_min
-
core::arch::wasm32::f32x4_relaxed_max
-
core::arch::wasm32::f64x2_relaxed_min
-
core::arch::wasm32::f64x2_relaxed_max
-
core::arch::wasm32::i16x8_relaxed_q15mulr
-
core::arch::wasm32::u16x8_relaxed_q15mulr
-
core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16
-
core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16
-
core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add
-
core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add
These APIs are now stable in const contexts:
-
std::task::Waker::from_raw
-
std::task::Context::from_waker
-
std::task::Context::waker
-
$integer::from_str_radix
-
std::num::ParseIntError::kind
Cargo
Compatibility Notes
- We now disallow setting some built-in cfgs via the command-line with the newly added
explicit_builtin_cfgs_in_flags
lint in order to prevent incoherent state, eg.windows
cfg active but target is Linux based. The appropriaterustc
flag should be used instead. - The standard library has a new implementation of
binary_search
which is significantly improves performance (#128254). However when a sorted slice has multiple values which compare equal, the new implementation may select a different value among the equal ones than the old implementation. -
illumos/Solaris now sets
MSG_NOSIGNAL
when writing to sockets. This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets. - Removes a problematic hack that always passed the --whole-archive linker flag for tests, which may cause linker errors for code accidentally relying on it.
- The WebAssembly target features
multivalue
andreference-types
are now both enabled by default. These two features both have subtle changes implied for generated WebAssembly binaries. For themultivalue
feature, WebAssembly target support has changed when upgrading to LLVM 19. Support for generating functions with multiple returns no longer works and-Ctarget-feature=+multivalue
has a different meaning than it did in LLVM 18 and prior. There is no longer any supported means to generate a module that has a function with multiple returns in WebAssembly from Rust source code. For thereference-types
feature the encoding of immediates in thecall_indirect
, a commonly used instruction by the WebAssembly backend, has changed. Validators and parsers which don't understand thereference-types
proposal will no longer accept modules produced by LLVM due to this change in encoding of immediates. Additionally these features being enabled are encoded in thetarget_features
custom section and may affect downstream tooling such aswasm-opt
consuming the module. Generating a WebAssembly module that disables default features requires-Zbuild-std
support from Cargo and more information can be found at rust-lang/rust#128511. - Rust now raises unsafety errors for union patterns in parameter-position
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.