|
| 1 | +Version 1.82.0 (2024-10-17) |
| 2 | +========================== |
| 3 | + |
| 4 | +<a id="1.82.0-Language"></a> |
| 5 | + |
| 6 | +Language |
| 7 | +-------- |
| 8 | +- [Don't make statement nonterminals match pattern nonterminals](https://github.com./rust-lang/rust/pull/120221/) |
| 9 | +- [Patterns matching empty types can now be omitted in common cases](https://github.com./rust-lang/rust/pull/122792) |
| 10 | +- [Enforce supertrait outlives obligations when using trait impls](https://github.com./rust-lang/rust/pull/124336) |
| 11 | +- [`addr_of(_mut)!` macros and the newly stabilized `&raw (const|mut)` are now safe to use with all static items](https://github.com./rust-lang/rust/pull/125834) |
| 12 | +- [size_of_val_raw: for length 0 this is safe to call](https://github.com./rust-lang/rust/pull/126152/) |
| 13 | +- [Reorder trait bound modifiers *after* `for<...>` binder in trait bounds](https://github.com./rust-lang/rust/pull/127054/) |
| 14 | +- [Stabilize opaque type precise capturing (RFC 3617)](https://github.com./rust-lang/rust/pull/127672) |
| 15 | +- [Stabilize `&raw const` and `&raw mut` operators (RFC 2582)](https://github.com./rust-lang/rust/pull/127679) |
| 16 | +- [Stabilize unsafe extern blocks (RFC 3484)](https://github.com./rust-lang/rust/pull/127921) |
| 17 | +- [Stabilize nested field access in `offset_of!`](https://github.com./rust-lang/rust/pull/128284) |
| 18 | +- [Do not require `T` to be live when dropping `[T; 0]`](https://github.com./rust-lang/rust/pull/128438) |
| 19 | +- [Stabilize `const` operands in inline assembly](https://github.com./rust-lang/rust/pull/128570) |
| 20 | +- [Stabilize floating-point arithmetic in `const fn`](https://github.com./rust-lang/rust/pull/128596) |
| 21 | +- [Stabilize explicit opt-in to unsafe attributes](https://github.com./rust-lang/rust/pull/128771) |
| 22 | +- [Document NaN bit patterns guarantees](https://github.com./rust-lang/rust/pull/129559) |
| 23 | + |
| 24 | + |
| 25 | +<a id="1.82.0-Compiler"></a> |
| 26 | + |
| 27 | +Compiler |
| 28 | +-------- |
| 29 | +- [Promote riscv64gc-unknown-linux-musl to tier 2](https://github.com./rust-lang/rust/pull/122049) |
| 30 | +- [Promote Mac Catalyst targets `aarch64-apple-ios-macabi` and `x86_64-apple-ios-macabi` to Tier 2, and ship them with rustup](https://github.com./rust-lang/rust/pull/126450) |
| 31 | +- [Add tier 3 NuttX based targets for RISC-V and ARM](https://github.com./rust-lang/rust/pull/127755) |
| 32 | +- [Add tier 3 powerpc-unknown-linux-muslspe target](https://github.com./rust-lang/rust/pull/127905) |
| 33 | +- [Improved diagnostics to explain why a pattern is unreachable](https://github.com./rust-lang/rust/pull/128034) |
| 34 | +- [The compiler now triggers the unreachable code warning properly for async functions that don't return/are `-> !`](https://github.com./rust-lang/rust/pull/128443) |
| 35 | +- [Promote `aarch64-apple-darwin` to Tier 1](https://github.com./rust-lang/rust/pull/128592) |
| 36 | +- [Add Trusty OS target `aarch64-unknown-trusty` and `armv7-unknown-trusty` as tier 3 targets](https://github.com./rust-lang/rust/pull/129490) |
| 37 | +- [Promote `wasm32-wasip2` to Tier 2.](https://github.com./rust-lang/rust/pull/126967/) |
| 38 | + |
| 39 | + |
| 40 | +<a id="1.82.0-Libraries"></a> |
| 41 | + |
| 42 | +Libraries |
| 43 | +--------- |
| 44 | +- [Generalize `{Rc,Arc}::make_mut()` to `Path`, `OsStr`, and `CStr`.](https://github.com./rust-lang/rust/pull/126877) |
| 45 | + |
| 46 | +<a id="1.82.0-Stabilized-APIs"></a> |
| 47 | + |
| 48 | +Stabilized APIs |
| 49 | +--------------- |
| 50 | + |
| 51 | +- [`std::thread::Builder::spawn_unchecked`](https://doc.rust-lang.org/stable/std/thread/struct.Builder.html#method.spawn_unchecked) |
| 52 | +- [`std::str::CharIndices::offset`](https://doc.rust-lang.org/nightly/std/str/struct.CharIndices.html#method.offset) |
| 53 | +- [`std::option::Option::is_none_or`](https://doc.rust-lang.org/nightly/std/option/enum.Option.html#method.is_none_or) |
| 54 | +- [`[T]::is_sorted`](https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted) |
| 55 | +- [`[T]::is_sorted_by`](https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by) |
| 56 | +- [`[T]::is_sorted_by_key`](https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.is_sorted_by_key) |
| 57 | +- [`Iterator::is_sorted`](https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted) |
| 58 | +- [`Iterator::is_sorted_by`](https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by) |
| 59 | +- [`Iterator::is_sorted_by_key`](https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.html#method.is_sorted_by_key) |
| 60 | +- [`std::future::Ready::into_inner`](https://doc.rust-lang.org/nightly/std/future/struct.Ready.html#method.into_inner) |
| 61 | +- [`std::iter::repeat_n`](https://doc.rust-lang.org/nightly/std/iter/fn.repeat_n.html) |
| 62 | +- [`impl<T: Clone> DoubleEndedIterator for Take<Repeat<T>>`](https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-DoubleEndedIterator-for-Take%3CRepeat%3CT%3E%3E) |
| 63 | +- [`impl<T: Clone> ExactSizeIterator for Take<Repeat<T>>`](https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeat%3CT%3E%3E) |
| 64 | +- [`impl<T: Clone> ExactSizeIterator for Take<RepeatWith<T>>`](https://doc.rust-lang.org/nightly/std/iter/struct.Take.html#impl-ExactSizeIterator-for-Take%3CRepeatWith%3CF%3E%3E) |
| 65 | +- [`impl Default for std::collections::binary_heap::Iter`](https://doc.rust-lang.org/nightly/std/collections/binary_heap/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) |
| 66 | +- [`impl Default for std::collections::btree_map::RangeMut`](https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.RangeMut.html#impl-Default-for-RangeMut%3C'_,+K,+V%3E) |
| 67 | +- [`impl Default for std::collections::btree_map::ValuesMut`](https://doc.rust-lang.org/nightly/std/collections/btree_map/struct.ValuesMut.html#impl-Default-for-ValuesMut%3C'_,+K,+V%3E) |
| 68 | +- [`impl Default for std::collections::vec_deque::Iter`](https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.Iter.html#impl-Default-for-Iter%3C'_,+T%3E) |
| 69 | +- [`impl Default for std::collections::vec_deque::IterMut`](https://doc.rust-lang.org/nightly/std/collections/vec_deque/struct.IterMut.html#impl-Default-for-IterMut%3C'_,+T%3E) |
| 70 | +- [`Rc<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit) |
| 71 | +- [`Rc<T>::assume_init`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init) |
| 72 | +- [`Rc<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.new_uninit_slice) |
| 73 | +- [`Rc<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/rc/struct.Rc.html#method.assume_init-1) |
| 74 | +- [`Arc<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit) |
| 75 | +- [`Arc<T>::assume_init`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init) |
| 76 | +- [`Arc<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.new_uninit_slice) |
| 77 | +- [`Arc<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.assume_init-1) |
| 78 | +- [`Box<T>::new_uninit`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit) |
| 79 | +- [`Box<T>::assume_init`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init) |
| 80 | +- [`Box<[T]>::new_uninit_slice`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.new_uninit_slice) |
| 81 | +- [`Box<[MaybeUninit<T>]>::assume_init`](https://doc.rust-lang.org/nightly/std/boxed/struct.Box.html#method.assume_init-1) |
| 82 | +- [`core::arch::x86_64::_bextri_u64`](https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u64.html) |
| 83 | +- [`core::arch::x86_64::_bextri_u32`](https://doc.rust-lang.org/stable/core/arch/x86_64/fn._bextri_u32.html) |
| 84 | +- [`core::arch::x86::_mm_broadcastsi128_si256`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_broadcastsi128_si256.html) |
| 85 | +- [`core::arch::x86::_mm256_stream_load_si256`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm256_stream_load_si256.html) |
| 86 | +- [`core::arch::x86::_tzcnt_u16`](https://doc.rust-lang.org/stable/core/arch/x86/fn._tzcnt_u16.html) |
| 87 | +- [`core::arch::x86::_mm_extracti_si64`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_extracti_si64.html) |
| 88 | +- [`core::arch::x86::_mm_inserti_si64`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_inserti_si64.html) |
| 89 | +- [`core::arch::x86::_mm_storeu_si16`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si16.html) |
| 90 | +- [`core::arch::x86::_mm_storeu_si32`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si32.html) |
| 91 | +- [`core::arch::x86::_mm_storeu_si64`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_storeu_si64.html) |
| 92 | +- [`core::arch::x86::_mm_loadu_si16`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si16.html) |
| 93 | +- [`core::arch::x86::_mm_loadu_si32`](https://doc.rust-lang.org/stable/core/arch/x86/fn._mm_loadu_si32.html) |
| 94 | +- [`core::arch::wasm32::u8x16_relaxed_swizzle`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_swizzle.html) |
| 95 | +- [`core::arch::wasm32::i8x16_relaxed_swizzle`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_swizzle.html) |
| 96 | +- [`core::arch::wasm32::i32x4_relaxed_trunc_f32x4`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f32x4.html) |
| 97 | +- [`core::arch::wasm32::u32x4_relaxed_trunc_f32x4`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f32x4.html) |
| 98 | +- [`core::arch::wasm32::i32x4_relaxed_trunc_f64x2_zero`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_trunc_f64x2_zero.html) |
| 99 | +- [`core::arch::wasm32::u32x4_relaxed_trunc_f64x2_zero`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_trunc_f64x2_zero.html) |
| 100 | +- [`core::arch::wasm32::f32x4_relaxed_madd`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_madd.html) |
| 101 | +- [`core::arch::wasm32::f32x4_relaxed_nmadd`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_nmadd.html) |
| 102 | +- [`core::arch::wasm32::f64x2_relaxed_madd`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_madd.html) |
| 103 | +- [`core::arch::wasm32::f64x2_relaxed_nmadd`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_nmadd.html) |
| 104 | +- [`core::arch::wasm32::i8x16_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i8x16_relaxed_laneselect.html) |
| 105 | +- [`core::arch::wasm32::u8x16_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u8x16_relaxed_laneselect.html) |
| 106 | +- [`core::arch::wasm32::i16x8_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_laneselect.html) |
| 107 | +- [`core::arch::wasm32::u16x8_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_laneselect.html) |
| 108 | +- [`core::arch::wasm32::i32x4_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_laneselect.html) |
| 109 | +- [`core::arch::wasm32::u32x4_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_laneselect.html) |
| 110 | +- [`core::arch::wasm32::i64x2_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i64x2_relaxed_laneselect.html) |
| 111 | +- [`core::arch::wasm32::u64x2_relaxed_laneselect`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u64x2_relaxed_laneselect.html) |
| 112 | +- [`core::arch::wasm32::f32x4_relaxed_min`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_min.html) |
| 113 | +- [`core::arch::wasm32::f32x4_relaxed_max`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f32x4_relaxed_max.html) |
| 114 | +- [`core::arch::wasm32::f64x2_relaxed_min`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_min.html) |
| 115 | +- [`core::arch::wasm32::f64x2_relaxed_max`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.f64x2_relaxed_max.html) |
| 116 | +- [`core::arch::wasm32::i16x8_relaxed_q15mulr`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_q15mulr.html) |
| 117 | +- [`core::arch::wasm32::u16x8_relaxed_q15mulr`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_q15mulr.html) |
| 118 | +- [`core::arch::wasm32::i16x8_relaxed_dot_i8x16_i7x16`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i16x8_relaxed_dot_i8x16_i7x16.html) |
| 119 | +- [`core::arch::wasm32::u16x8_relaxed_dot_i8x16_i7x16`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u16x8_relaxed_dot_i8x16_i7x16.html) |
| 120 | +- [`core::arch::wasm32::i32x4_relaxed_dot_i8x16_i7x16_add`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.i32x4_relaxed_dot_i8x16_i7x16_add.html) |
| 121 | +- [`core::arch::wasm32::u32x4_relaxed_dot_i8x16_i7x16_add`](https://doc.rust-lang.org/nightly/core/arch/wasm32/fn.u32x4_relaxed_dot_i8x16_i7x16_add.html) |
| 122 | + |
| 123 | +These APIs are now stable in const contexts: |
| 124 | + |
| 125 | +- [`std::task::Waker::from_raw`](https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) |
| 126 | +- [`std::task::Waker::waker`](https://doc.rust-lang.org/nightly/std/task/struct.Waker.html#method.from_raw) |
| 127 | +- [`std::task::Context::from_waker`](https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.from_waker) |
| 128 | +- [`std::task::Context::waker`](https://doc.rust-lang.org/nightly/std/task/struct.Context.html#method.waker) |
| 129 | +- [`$integer::from_str_radix`](https://doc.rust-lang.org/nightly/std/primitive.u32.html#method.from_str_radix) |
| 130 | +- [`std::num::ParseIntError::kind`](https://doc.rust-lang.org/nightly/std/num/struct.ParseIntError.html#method.kind) |
| 131 | + |
| 132 | +<a id="1.82.0-Cargo"></a> |
| 133 | + |
| 134 | +Cargo |
| 135 | +----- |
| 136 | +- [feat: Add `info` cargo subcommand](https://github.com./rust-lang/cargo/pull/14141/) |
| 137 | + |
| 138 | +<a id="1.82.0-Compatibility-Notes"></a> |
| 139 | + |
| 140 | +Compatibility Notes |
| 141 | +------------------- |
| 142 | + - We now [disallow setting some built-in cfgs via the command-line](https://github.com./rust-lang/rust/pull/126158) with the newly added [`explicit_builtin_cfgs_in_flags`](https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html#explicit-builtin-cfgs-in-flags) lint in order to prevent incoherent state, eg. `windows` cfg active but target is Linux based. The appropriate [`rustc` flag](https://doc.rust-lang.org/rustc/command-line-arguments.html) should be used instead. |
| 143 | +- The standard library has a new implementation of `binary_search` which is significantly improves performance ([#128254](https://github.com./rust-lang/rust/pull/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. |
| 144 | +- [illumos/Solaris now sets `MSG_NOSIGNAL` when writing to sockets](https://github.com./rust-lang/rust/pull/128259). This avoids killing the process with SIGPIPE when writing to a closed socket, which matches the existing behavior on other UNIX targets. |
| 145 | +- [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.](https://github.com./rust-lang/rust/pull/128400) |
| 146 | +- The WebAssembly target features `multivalue` and `reference-types` are now |
| 147 | + both enabled by default. These two features both have subtle changes implied |
| 148 | + for generated WebAssembly binaries. For the `multivalue` feature, WebAssembly |
| 149 | + target support has changed when upgrading to LLVM 19. Support for generating |
| 150 | + functions with multiple returns no longer works and |
| 151 | + `-Ctarget-feature=+multivalue` has a different meaning than it did in LLVM 18 |
| 152 | + and prior. There is no longer any supported means to generate a module that has |
| 153 | + a function with multiple returns in WebAssembly from Rust source code. For the |
| 154 | + `reference-types` feature the encoding of immediates in the `call_indirect`, a |
| 155 | + commonly used instruction by the WebAssembly backend, has changed. Validators |
| 156 | + and parsers which don't understand the `reference-types` proposal will no |
| 157 | + longer accept modules produced by LLVM due to this change in encoding of |
| 158 | + immediates. Additionally these features being enabled are encoded in the |
| 159 | + `target_features` custom section and may affect downstream tooling such as |
| 160 | + `wasm-opt` consuming the module. Generating a WebAssembly module that disables |
| 161 | + default features requires `-Zbuild-std` support from Cargo and more information |
| 162 | + can be found at |
| 163 | + [rust-lang/rust#128511](https://github.com./rust-lang/rust/pull/128511). |
| 164 | +- [Rust now raises unsafety errors for union patterns in parameter-position](https://github.com./rust-lang/rust/pull/130531) |
| 165 | + |
| 166 | + |
| 167 | +<a id="1.82.0-Internal-Changes"></a> |
| 168 | + |
| 169 | +Internal Changes |
| 170 | +---------------- |
| 171 | + |
| 172 | +These changes do not affect any public interfaces of Rust, but they represent |
| 173 | +significant improvements to the performance or internals of rustc and related |
| 174 | +tools. |
| 175 | + |
| 176 | +- [Update to LLVM 19](https://github.com./rust-lang/rust/pull/127513) |
| 177 | + |
1 | 178 | Version 1.81.0 (2024-09-05)
|
2 | 179 | ==========================
|
3 | 180 |
|
|
0 commit comments