|
| 1 | +Version 1.65.0 (2022-11-03) |
| 2 | +========================== |
| 3 | + |
| 4 | +Language |
| 5 | +-------- |
| 6 | +- [Error on `as` casts of enums with `#[non_exhaustive]` variants](https://github.com/rust-lang/rust/pull/92744/) |
| 7 | +- [Stabilize `let else`](https://github.com/rust-lang/rust/pull/93628/) |
| 8 | +- [Stabilize generic associated types (GATs)](https://github.com/rust-lang/rust/pull/96709/) |
| 9 | +- [Add lints `let_underscore_drop`, `let_underscore_lock`, and `let_underscore_must_use` from Clippy](https://github.com/rust-lang/rust/pull/97739/) |
| 10 | +- [Stabilize `break`ing from arbitrary labeled blocks ("label-break-value")](https://github.com/rust-lang/rust/pull/99332/) |
| 11 | +- [Uninitialized integers, floats, and raw pointers are now considered immediate UB](https://github.com/rust-lang/rust/pull/98919/). |
| 12 | + Usage of `MaybeUninit` is the correct way to work with uninitialized memory. |
| 13 | +- [Stabilize raw-dylib for Windows x86_64, aarch64, and thumbv7a](https://github.com/rust-lang/rust/pull/99916/) |
| 14 | +- [Do not allow `Drop` impl on foreign ADTs](https://github.com/rust-lang/rust/pull/99576/) |
| 15 | + |
| 16 | +Compiler |
| 17 | +-------- |
| 18 | +- [Stabilize -Csplit-debuginfo on Linux](https://github.com/rust-lang/rust/pull/98051/) |
| 19 | +- [Use niche-filling optimization even when multiple variants have data](https://github.com/rust-lang/rust/pull/94075/) |
| 20 | +- [Associated type projections are now verified to be well-formed prior to resolving the underlying type](https://github.com/rust-lang/rust/pull/99217/#issuecomment-1209365630) |
| 21 | +- [Stringify non-shorthand visibility correctly](https://github.com/rust-lang/rust/pull/100350/) |
| 22 | +- [Normalize struct field types when unsizing](https://github.com/rust-lang/rust/pull/101831/) |
| 23 | +- [Update to LLVM 15](https://github.com/rust-lang/rust/pull/99464/) |
| 24 | +- [Fix aarch64 call abi to correctly zeroext when needed](https://github.com/rust-lang/rust/pull/97800/) |
| 25 | +- [debuginfo: Generalize C++-like encoding for enums](https://github.com/rust-lang/rust/pull/98393/) |
| 26 | +- [Add `special_module_name` lint](https://github.com/rust-lang/rust/pull/94467/) |
| 27 | +- [Add support for generating unique profraw files by default when using `-C instrument-coverage`](https://github.com/rust-lang/rust/pull/100384/) |
| 28 | +- [Allow dynamic linking for iOS/tvOS targets](https://github.com/rust-lang/rust/pull/100636/) |
| 29 | + |
| 30 | +New targets: |
| 31 | + |
| 32 | +- [Add armv4t-none-eabi as a tier 3 target](https://github.com/rust-lang/rust/pull/100244/) |
| 33 | +- [Add powerpc64-unknown-openbsd and riscv64-unknown-openbsd as tier 3 targets](https://github.com/rust-lang/rust/pull/101025/) |
| 34 | + - Refer to Rust's [platform support page][platform-support-doc] for more |
| 35 | + information on Rust's tiered platform support. |
| 36 | + |
| 37 | +Libraries |
| 38 | +--------- |
| 39 | + |
| 40 | +- [Don't generate `PartialEq::ne` in derive(PartialEq)](https://github.com/rust-lang/rust/pull/98655/) |
| 41 | +- [Windows RNG: Use `BCRYPT_RNG_ALG_HANDLE` by default](https://github.com/rust-lang/rust/pull/101325/) |
| 42 | +- [Forbid mixing `System` with direct system allocator calls](https://github.com/rust-lang/rust/pull/101394/) |
| 43 | +- [Document no support for writing to non-blocking stdio/stderr](https://github.com/rust-lang/rust/pull/101416/) |
| 44 | +- [`std::layout::Layout` size must not overflow `isize::MAX` when rounded up to `align`](https://github.com/rust-lang/rust/pull/95295) |
| 45 | + This also changes the safety conditions on `Layout::from_size_align_unchecked`. |
| 46 | + |
| 47 | +Stabilized APIs |
| 48 | +--------------- |
| 49 | + |
| 50 | +- [`std::backtrace::Backtrace`](https://doc.rust-lang.org/stable/std/backtrace/struct.Backtrace.html) |
| 51 | +- [`Bound::as_ref`](https://doc.rust-lang.org/stable/std/ops/enum.Bound.html#method.as_ref) |
| 52 | +- [`std::io::read_to_string`](https://doc.rust-lang.org/stable/std/io/fn.read_to_string.html) |
| 53 | +- [`<*const T>::cast_mut`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_mut) |
| 54 | +- [`<*mut T>::cast_const`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.cast_const) |
| 55 | + |
| 56 | +These APIs are now stable in const contexts: |
| 57 | + |
| 58 | +- [`<*const T>::offset_from`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from) |
| 59 | +- [`<*mut T>::offset_from`](https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset_from) |
| 60 | + |
| 61 | +Cargo |
| 62 | +----- |
| 63 | + |
| 64 | +- [Apply GitHub fast path even for partial hashes](https://github.com/rust-lang/cargo/pull/10807/) |
| 65 | +- [Do not add home bin path to PATH if it's already there](https://github.com/rust-lang/cargo/pull/11023/) |
| 66 | +- [Take priority into account within the pending queue](https://github.com/rust-lang/cargo/pull/11032/). |
| 67 | + This slightly optimizes job scheduling by Cargo, with typically small improvements on larger crate graph builds. |
| 68 | + |
| 69 | +Compatibility Notes |
| 70 | +------------------- |
| 71 | + |
| 72 | +- [`std::layout::Layout` size must not overflow `isize::MAX` when rounded up to `align`](https://github.com/rust-lang/rust/pull/95295). |
| 73 | + This also changes the safety conditions on `Layout::from_size_align_unchecked`. |
| 74 | +- [`PollFn` now only implements `Unpin` if the closure is `Unpin`](https://github.com/rust-lang/rust/pull/102737). |
| 75 | + This is a possible breaking change if users were relying on the blanket unpin implementation. |
| 76 | + See discussion on the PR for details of why this change was made. |
| 77 | +- [Drop ExactSizeIterator impl from std::char::EscapeAscii](https://github.com/rust-lang/rust/pull/99880) |
| 78 | + This is a backwards-incompatible change to the standard library's surface |
| 79 | + area, but is unlikely to affect real world usage. |
| 80 | +- [Do not consider a single repeated lifetime eligible for elision in the return type](https://github.com/rust-lang/rust/pull/103450) |
| 81 | + This behavior was unintentionally changed in 1.64.0, and this release reverts that change by making this an error again. |
| 82 | +- [Reenable disabled early syntax gates as future-incompatibility lints](https://github.com/rust-lang/rust/pull/99935/) |
| 83 | +- [Update the minimum external LLVM to 13](https://github.com/rust-lang/rust/pull/100460/) |
| 84 | +- [Don't duplicate file descriptors into stdio fds](https://github.com/rust-lang/rust/pull/101426/) |
| 85 | +- [Sunset RLS](https://github.com/rust-lang/rust/pull/100863/) |
| 86 | +- [Deny usage of `#![cfg_attr(..., crate_type = ...)]` to set the crate type](https://github.com/rust-lang/rust/pull/99784/) |
| 87 | + This strengthens the forward compatibility lint deprecated_cfg_attr_crate_type_name to deny. |
| 88 | +- [`llvm-has-rust-patches` allows setting the build system to treat the LLVM as having Rust-specific patches](https://github.com/rust-lang/rust/pull/101072) |
| 89 | + This option may need to be set for distributions that are building Rust with a patched LLVM via `llvm-config`, not the built-in LLVM. |
| 90 | + |
| 91 | +Internal Changes |
| 92 | +---------------- |
| 93 | + |
| 94 | +These changes do not affect any public interfaces of Rust, but they represent |
| 95 | +significant improvements to the performance or internals of rustc and related |
| 96 | +tools. |
| 97 | + |
| 98 | +- [Add `x.sh` and `x.ps1` shell scripts](https://github.com/rust-lang/rust/pull/99992/) |
| 99 | +- [compiletest: use target cfg instead of hard-coded tables](https://github.com/rust-lang/rust/pull/100260/) |
| 100 | +- [Use object instead of LLVM for reading bitcode from rlibs](https://github.com/rust-lang/rust/pull/98100/) |
| 101 | +- [Enable MIR inlining for optimized compilations](https://github.com/rust-lang/rust/pull/91743) |
| 102 | + This provides a 3-10% improvement in compiletimes for real world crates. See [perf results](https://perf.rust-lang.org/compare.html?start=aedf78e56b2279cc869962feac5153b6ba7001ed&end=0075bb4fad68e64b6d1be06bf2db366c30bc75e1&stat=instructions:u). |
| 103 | + |
| 104 | +Version 1.64.0 (2022-09-22) |
| 105 | +=========================== |
| 106 | + |
| 107 | +Language |
| 108 | +-------- |
| 109 | +- [Unions with mutable references or tuples of allowed types are now allowed](https://github.com/rust-lang/rust/pull/97995/) |
| 110 | +- It is now considered valid to deallocate memory pointed to by a shared reference `&T` [if every byte in `T` is inside an `UnsafeCell`](https://github.com/rust-lang/rust/pull/98017/) |
| 111 | +- Unused tuple struct fields are now warned against in an allow-by-default lint, [`unused_tuple_struct_fields`](https://github.com/rust-lang/rust/pull/95977/), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future. |
| 112 | + |
| 113 | +Compiler |
| 114 | +-------- |
| 115 | +- [Add Nintendo Switch as tier 3 target](https://github.com/rust-lang/rust/pull/88991/) |
| 116 | + - Refer to Rust's [platform support page][platform-support-doc] for more |
| 117 | + information on Rust's tiered platform support. |
| 118 | +- [Only compile `#[used]` as llvm.compiler.used for ELF targets](https://github.com/rust-lang/rust/pull/93718/) |
| 119 | +- [Add the `--diagnostic-width` compiler flag to define the terminal width.](https://github.com/rust-lang/rust/pull/95635/) |
| 120 | +- [Add support for link-flavor `rust-lld` for iOS, tvOS and watchOS](https://github.com/rust-lang/rust/pull/98771/) |
| 121 | + |
| 122 | +Libraries |
| 123 | +--------- |
| 124 | +- [Remove restrictions on compare-exchange memory ordering.](https://github.com/rust-lang/rust/pull/98383/) |
| 125 | +- You can now `write!` or `writeln!` into an `OsString`: [Implement `fmt::Write` for `OsString`](https://github.com/rust-lang/rust/pull/97915/) |
| 126 | +- [Make RwLockReadGuard covariant](https://github.com/rust-lang/rust/pull/96820/) |
| 127 | +- [Implement `FusedIterator` for `std::net::[Into]Incoming`](https://github.com/rust-lang/rust/pull/97300/) |
| 128 | +- [`impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>`](https://github.com/rust-lang/rust/pull/97437/) |
| 129 | +- [`ptr::copy` and `ptr::swap` are doing untyped copies](https://github.com/rust-lang/rust/pull/97712/) |
| 130 | +- [Add cgroupv1 support to `available_parallelism`](https://github.com/rust-lang/rust/pull/97925/) |
| 131 | +- [Mitigate many incorrect uses of `mem::uninitialized`](https://github.com/rust-lang/rust/pull/99182/) |
| 132 | + |
| 133 | +Stabilized APIs |
| 134 | +--------------- |
| 135 | + |
| 136 | +- [`future::IntoFuture`](https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html) |
| 137 | +- [`future::poll_fn`](https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html) |
| 138 | +- [`task::ready!`](https://doc.rust-lang.org/stable/std/task/macro.ready.html) |
| 139 | +- [`num::NonZero*::checked_mul`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul) |
| 140 | +- [`num::NonZero*::checked_pow`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow) |
| 141 | +- [`num::NonZero*::saturating_mul`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul) |
| 142 | +- [`num::NonZero*::saturating_pow`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow) |
| 143 | +- [`num::NonZeroI*::abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs) |
| 144 | +- [`num::NonZeroI*::checked_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs) |
| 145 | +- [`num::NonZeroI*::overflowing_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs) |
| 146 | +- [`num::NonZeroI*::saturating_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs) |
| 147 | +- [`num::NonZeroI*::unsigned_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs) |
| 148 | +- [`num::NonZeroI*::wrapping_abs`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs) |
| 149 | +- [`num::NonZeroU*::checked_add`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add) |
| 150 | +- [`num::NonZeroU*::checked_next_power_of_two`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two) |
| 151 | +- [`num::NonZeroU*::saturating_add`](https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add) |
| 152 | +- [`os::unix::process::CommandExt::process_group`](https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group) |
| 153 | +- [`os::windows::fs::FileTypeExt::is_symlink_dir`](https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir) |
| 154 | +- [`os::windows::fs::FileTypeExt::is_symlink_file`](https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file) |
| 155 | + |
| 156 | +These types were previously stable in `std::ffi`, but are now also available in `core` and `alloc`: |
| 157 | + |
| 158 | +- [`core::ffi::CStr`](https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html) |
| 159 | +- [`core::ffi::FromBytesWithNulError`](https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html) |
| 160 | +- [`alloc::ffi::CString`](https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html) |
| 161 | +- [`alloc::ffi::FromVecWithNulError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html) |
| 162 | +- [`alloc::ffi::IntoStringError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html) |
| 163 | +- [`alloc::ffi::NulError`](https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html) |
| 164 | + |
| 165 | +These types were previously stable in `std::os::raw`, but are now also available in `core::ffi` and `std::ffi`: |
| 166 | + |
| 167 | +- [`ffi::c_char`](https://doc.rust-lang.org/stable/std/ffi/type.c_char.html) |
| 168 | +- [`ffi::c_double`](https://doc.rust-lang.org/stable/std/ffi/type.c_double.html) |
| 169 | +- [`ffi::c_float`](https://doc.rust-lang.org/stable/std/ffi/type.c_float.html) |
| 170 | +- [`ffi::c_int`](https://doc.rust-lang.org/stable/std/ffi/type.c_int.html) |
| 171 | +- [`ffi::c_long`](https://doc.rust-lang.org/stable/std/ffi/type.c_long.html) |
| 172 | +- [`ffi::c_longlong`](https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html) |
| 173 | +- [`ffi::c_schar`](https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html) |
| 174 | +- [`ffi::c_short`](https://doc.rust-lang.org/stable/std/ffi/type.c_short.html) |
| 175 | +- [`ffi::c_uchar`](https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html) |
| 176 | +- [`ffi::c_uint`](https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html) |
| 177 | +- [`ffi::c_ulong`](https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html) |
| 178 | +- [`ffi::c_ulonglong`](https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html) |
| 179 | +- [`ffi::c_ushort`](https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html) |
| 180 | + |
| 181 | +These APIs are now usable in const contexts: |
| 182 | + |
| 183 | +- [`slice::from_raw_parts`](https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html) |
| 184 | + |
| 185 | +Cargo |
| 186 | +----- |
| 187 | +- [Packages can now inherit settings from the workspace so that the settings |
| 188 | + can be centralized in one place.](https://github.com/rust-lang/cargo/pull/10859) See |
| 189 | + [`workspace.package`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-workspacepackage-table) |
| 190 | + and |
| 191 | + [`workspace.dependencies`](https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-workspacedependencies-table) |
| 192 | + for more details on how to define these common settings. |
| 193 | +- [Cargo commands can now accept multiple `--target` flags to build for |
| 194 | + multiple targets at once](https://github.com/rust-lang/cargo/pull/10766), and the |
| 195 | + [`build.target`](https://doc.rust-lang.org/nightly/cargo/reference/config.html#buildtarget) |
| 196 | + config option may now take an array of multiple targets. |
| 197 | +- [The `--jobs` argument can now take a negative number to count backwards from |
| 198 | + the max CPUs.](https://github.com/rust-lang/cargo/pull/10844) |
| 199 | +- [`cargo add` will now update `Cargo.lock`.](https://github.com/rust-lang/cargo/pull/10902) |
| 200 | +- [Added](https://github.com/rust-lang/cargo/pull/10838) the |
| 201 | + [`--crate-type`](https://doc.rust-lang.org/nightly/cargo/commands/cargo-rustc.html#option-cargo-rustc---crate-type) |
| 202 | + flag to `cargo rustc` to override the crate type. |
| 203 | +- [Significantly improved the performance fetching git dependencies from GitHub |
| 204 | + when using a hash in the `rev` field.](https://github.com/rust-lang/cargo/pull/10079) |
| 205 | + |
| 206 | +Misc |
| 207 | +---- |
| 208 | +- [The `rust-analyzer` rustup component is now available on the stable channel.](https://github.com/rust-lang/rust/pull/98640/) |
| 209 | + |
| 210 | +Compatibility Notes |
| 211 | +------------------- |
| 212 | +- The minimum required versions for all `-linux-gnu` targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: [Increase the minimum linux-gnu versions](https://github.com/rust-lang/rust/pull/95026/) |
| 213 | +- [Network primitives are now implemented with the ideal Rust layout, not the C system layout](https://github.com/rust-lang/rust/pull/78802/). This can cause problems when transmuting the types. |
| 214 | +- [Add assertion that `transmute_copy`'s `U` is not larger than `T`](https://github.com/rust-lang/rust/pull/98839/) |
| 215 | +- [A soundness bug in `BTreeMap` was fixed](https://github.com/rust-lang/rust/pull/99413/) that allowed data it was borrowing to be dropped before the container. |
| 216 | +- [The Drop behavior of C-like enums cast to ints has changed](https://github.com/rust-lang/rust/pull/96862/). These are already discouraged by a compiler warning. |
| 217 | +- [Relate late-bound closure lifetimes to parent fn in NLL](https://github.com/rust-lang/rust/pull/98835/) |
| 218 | +- [Errors at const-eval time are now in future incompatibility reports](https://github.com/rust-lang/rust/pull/97743/) |
| 219 | +- On the `thumbv6m-none-eabi` target, some incorrect `asm!` statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted](https://github.com/rust-lang/rust/pull/99155/). |
| 220 | +- [`impl Trait` was accidentally accepted as the associated type value of return-position `impl Trait`](https://github.com/rust-lang/rust/pull/97346/), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed. |
| 221 | + |
| 222 | +Internal Changes |
| 223 | +---------------- |
| 224 | + |
| 225 | +These changes do not affect any public interfaces of Rust, but they represent |
| 226 | +significant improvements to the performance or internals of rustc and related |
| 227 | +tools. |
| 228 | + |
| 229 | +- Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds](https://github.com/rust-lang/rust/pull/96978/) |
| 230 | +- [Stop keeping metadata in memory before writing it to disk](https://github.com/rust-lang/rust/pull/96544/) |
| 231 | +- [compiletest: strip debuginfo by default for mode=ui](https://github.com/rust-lang/rust/pull/98140/) |
| 232 | +- Many improvements to generated code for derives, including performance improvements: |
| 233 | + - [Don't use match-destructuring for derived ops on structs.](https://github.com/rust-lang/rust/pull/98446/) |
| 234 | + - [Many small deriving cleanups](https://github.com/rust-lang/rust/pull/98741/) |
| 235 | + - [More derive output improvements](https://github.com/rust-lang/rust/pull/98758/) |
| 236 | + - [Clarify deriving code](https://github.com/rust-lang/rust/pull/98915/) |
| 237 | + - [Final derive output improvements](https://github.com/rust-lang/rust/pull/99046/) |
| 238 | + - [Stop injecting `#[allow(unused_qualifications)]` in generated `derive` implementations](https://github.com/rust-lang/rust/pull/99485/) |
| 239 | + - [Improve `derive(Debug)`](https://github.com/rust-lang/rust/pull/98190/) |
| 240 | +- [Bump to clap 3](https://github.com/rust-lang/rust/pull/98213/) |
| 241 | +- [fully move dropck to mir](https://github.com/rust-lang/rust/pull/98641/) |
| 242 | +- [Optimize `Vec::insert` for the case where `index == len`.](https://github.com/rust-lang/rust/pull/98755/) |
| 243 | +- [Convert rust-analyzer to an in-tree tool](https://github.com/rust-lang/rust/pull/99603/) |
| 244 | + |
1 | 245 | Version 1.63.0 (2022-08-11)
|
2 | 246 | ==========================
|
3 | 247 |
|
|
0 commit comments