|
| 1 | +Version 1.62.0 (2022-06-30) |
| 2 | +========================== |
| 3 | + |
| 4 | +Language |
| 5 | +-------- |
| 6 | + |
| 7 | +- [Stabilize `#[derive(Default)]` on enums with a `#[default]` variant][94457] |
| 8 | +- [Stop validating some checks in dead code after functions with uninhabited return types][93313] |
| 9 | +- [Fix constants not getting dropped if part of a diverging expression][94775] |
| 10 | +- [Support unit struct/enum variant in destructuring assignment][95380] |
| 11 | +- [Remove mutable_borrow_reservation_conflict lint and allow the code pattern][96268] |
| 12 | + |
| 13 | +Compiler |
| 14 | +-------- |
| 15 | + |
| 16 | +- [linker: Stop using whole-archive on dependencies of dylibs][96436] |
| 17 | +- [Make `unaligned_references` lint deny-by-default][95372] |
| 18 | + This lint is also a future compatibility lint, and is expected to eventually |
| 19 | + become a hard error. |
| 20 | +- [Only add codegen backend to dep info if -Zbinary-dep-depinfo is used][93969] |
| 21 | +- [Reject `#[thread_local]` attribute on non-static items][95006] |
| 22 | +- [Add tier 3 `aarch64-pc-windows-gnullvm` and `x86_64-pc-windows-gnullvm` targets\*][94872] |
| 23 | +- [Implement a lint to warn about unused macro rules][96150] |
| 24 | +- [Promote `x86_64-unknown-none` target to Tier 2\*][95705] |
| 25 | + |
| 26 | +\* Refer to Rust's [platform support page][platform-support-doc] for more |
| 27 | + information on Rust's tiered platform support. |
| 28 | + |
| 29 | +Libraries |
| 30 | +--------- |
| 31 | + |
| 32 | +- [Move `CStr` to libcore, and `CString` to liballoc][94079] |
| 33 | +- [Windows: Use a pipe relay for chaining pipes][95841] |
| 34 | +- [Replace Linux Mutex and Condvar with futex based ones.][95035] |
| 35 | +- [Replace RwLock by a futex based one on Linux][95801] |
| 36 | +- [std: directly use pthread in UNIX parker implementation][96393] |
| 37 | + |
| 38 | +Stabilized APIs |
| 39 | +--------------- |
| 40 | + |
| 41 | +- [`bool::then_some`] |
| 42 | +- [`f32::total_cmp`] |
| 43 | +- [`f64::total_cmp`] |
| 44 | +- [`Stdin::lines`] |
| 45 | +- [`windows::CommandExt::raw_arg`] |
| 46 | +- [`impl<T: Default> Default for AssertUnwindSafe<T>`] |
| 47 | +- [`From<Rc<str>> for Rc<[u8]>`][rc-u8-from-str] |
| 48 | +- [`From<Arc<str>> for Arc<[u8]>`][arc-u8-from-str] |
| 49 | +- [`FusedIterator for EncodeWide`] |
| 50 | +- [RDM intrinsics on aarch64][stdarch/1285] |
| 51 | + |
| 52 | +Clippy |
| 53 | +------ |
| 54 | + |
| 55 | +- [Create clippy lint against unexpectedly late drop for temporaries in match scrutinee expressions][94206] |
| 56 | + |
| 57 | +Cargo |
| 58 | +----- |
| 59 | + |
| 60 | +- Added the `cargo add` command for adding dependencies to `Cargo.toml` from |
| 61 | + the command-line. |
| 62 | + [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-add.html) |
| 63 | +- Package ID specs now support `name@version` syntax in addition to the |
| 64 | + previous `name:version` to align with the behavior in `cargo add` and other |
| 65 | + tools. `cargo install` and `cargo yank` also now support this syntax so the |
| 66 | + version does not need to passed as a separate flag. |
| 67 | +- The `git` and `registry` directories in Cargo's home directory (usually |
| 68 | + `~/.cargo`) are now marked as cache directories so that they are not |
| 69 | + included in backups or content indexing (on Windows). |
| 70 | +- Added automatic `@` argfile support, which will use "response files" if the |
| 71 | + command-line to `rustc` exceeds the operating system's limit. |
| 72 | + |
| 73 | +Compatibility Notes |
| 74 | +------------------- |
| 75 | + |
| 76 | +- `cargo test` now passes `--target` to `rustdoc` if the specified target is |
| 77 | + the same as the host target. |
| 78 | + [#10594](https://github.com/rust-lang/cargo/pull/10594) |
| 79 | +- [rustdoc: Remove .woff font files][96279] |
| 80 | +- [Enforce Copy bounds for repeat elements while considering lifetimes][95819] |
| 81 | + |
| 82 | +Internal Changes |
| 83 | +---------------- |
| 84 | + |
| 85 | +- [Unify ReentrantMutex implementations across all platforms][96042] |
| 86 | + |
| 87 | +These changes provide no direct user facing benefits, but represent significant |
| 88 | +improvements to the internals and overall performance of rustc |
| 89 | +and related tools. |
| 90 | + |
| 91 | +[93313]: https://github.com/rust-lang/rust/pull/93313/ |
| 92 | +[93969]: https://github.com/rust-lang/rust/pull/93969/ |
| 93 | +[94079]: https://github.com/rust-lang/rust/pull/94079/ |
| 94 | +[94206]: https://github.com/rust-lang/rust/pull/94206/ |
| 95 | +[94457]: https://github.com/rust-lang/rust/pull/94457/ |
| 96 | +[94775]: https://github.com/rust-lang/rust/pull/94775/ |
| 97 | +[94872]: https://github.com/rust-lang/rust/pull/94872/ |
| 98 | +[95006]: https://github.com/rust-lang/rust/pull/95006/ |
| 99 | +[95035]: https://github.com/rust-lang/rust/pull/95035/ |
| 100 | +[95372]: https://github.com/rust-lang/rust/pull/95372/ |
| 101 | +[95380]: https://github.com/rust-lang/rust/pull/95380/ |
| 102 | +[95431]: https://github.com/rust-lang/rust/pull/95431/ |
| 103 | +[95705]: https://github.com/rust-lang/rust/pull/95705/ |
| 104 | +[95801]: https://github.com/rust-lang/rust/pull/95801/ |
| 105 | +[95819]: https://github.com/rust-lang/rust/pull/95819/ |
| 106 | +[95841]: https://github.com/rust-lang/rust/pull/95841/ |
| 107 | +[96042]: https://github.com/rust-lang/rust/pull/96042/ |
| 108 | +[96150]: https://github.com/rust-lang/rust/pull/96150/ |
| 109 | +[96268]: https://github.com/rust-lang/rust/pull/96268/ |
| 110 | +[96279]: https://github.com/rust-lang/rust/pull/96279/ |
| 111 | +[96393]: https://github.com/rust-lang/rust/pull/96393/ |
| 112 | +[96436]: https://github.com/rust-lang/rust/pull/96436/ |
| 113 | +[96557]: https://github.com/rust-lang/rust/pull/96557/ |
| 114 | + |
| 115 | +[`bool::then_some`]: https://doc.rust-lang.org/stable/std/primitive.bool.html#method.then_some |
| 116 | +[`f32::total_cmp`]: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.total_cmp |
| 117 | +[`f64::total_cmp`]: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.total_cmp |
| 118 | +[`Stdin::lines`]: https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#method.lines |
| 119 | +[`impl<T: Default> Default for AssertUnwindSafe<T>`]: https://doc.rust-lang.org/stable/std/panic/struct.AssertUnwindSafe.html#impl-Default |
| 120 | +[rc-u8-from-str]: https://doc.rust-lang.org/stable/std/rc/struct.Rc.html#impl-From%3CRc%3Cstr%3E%3E |
| 121 | +[arc-u8-from-str]: https://doc.rust-lang.org/stable/std/sync/struct.Arc.html#impl-From%3CArc%3Cstr%3E%3E |
| 122 | +[stdarch/1285]: https://github.com/rust-lang/stdarch/pull/1285 |
| 123 | +[`windows::CommandExt::raw_arg`]: https://doc.rust-lang.org/stable/std/os/windows/process/trait.CommandExt.html#tymethod.raw_arg |
| 124 | +[`FusedIterator for EncodeWide`]: https://doc.rust-lang.org/stable/std/os/windows/ffi/struct.EncodeWide.html#impl-FusedIterator |
| 125 | + |
| 126 | +Version 1.61.0 (2022-05-19) |
| 127 | +========================== |
| 128 | + |
| 129 | +Language |
| 130 | +-------- |
| 131 | + |
| 132 | +- [`const fn` signatures can now include generic trait bounds][93827] |
| 133 | +- [`const fn` signatures can now use `impl Trait` in argument and return position][93827] |
| 134 | +- [Function pointers can now be created, cast, and passed around in a `const fn`][93827] |
| 135 | +- [Recursive calls can now set the value of a function's opaque `impl Trait` return type][94081] |
| 136 | + |
| 137 | +Compiler |
| 138 | +-------- |
| 139 | + |
| 140 | +- [Linking modifier syntax in `#[link]` attributes and on the command line, as well as the `whole-archive` modifier specifically, are now supported][93901] |
| 141 | +- [The `char` type is now described as UTF-32 in debuginfo][89887] |
| 142 | +- The [`#[target_feature]`][target_feature] attribute [can now be used with aarch64 features][90621] |
| 143 | +- X86 [`#[target_feature = "adx"]` is now stable][93745] |
| 144 | + |
| 145 | +Libraries |
| 146 | +--------- |
| 147 | + |
| 148 | +- [`ManuallyDrop<T>` is now documented to have the same layout as `T`][88375] |
| 149 | +- [`#[ignore = "…"]` messages are printed when running tests][92714] |
| 150 | +- [Consistently show absent stdio handles on Windows as NULL handles][93263] |
| 151 | +- [Make `std::io::stdio::lock()` return `'static` handles.][93965] Previously, the creation of locked handles to stdin/stdout/stderr would borrow the handles being locked, which prevented writing `let out = std::io::stdout().lock();` because `out` would outlive the return value of `stdout()`. Such code now works, eliminating a common pitfall that affected many Rust users. |
| 152 | +- [`Vec::from_raw_parts` is now less restrictive about its inputs][95016] |
| 153 | +- [`std::thread::available_parallelism` now takes cgroup quotas into account.][92697] Since `available_parallelism` is often used to create a thread pool for parallel computation, which may be CPU-bound for performance, `available_parallelism` will return a value consistent with the ability to use that many threads continuously, if possible. For instance, in a container with 8 virtual CPUs but quotas only allowing for 50% usage, `available_parallelism` will return 4. |
| 154 | + |
| 155 | +Stabilized APIs |
| 156 | +--------------- |
| 157 | + |
| 158 | +- [`Pin::static_mut`] |
| 159 | +- [`Pin::static_ref`] |
| 160 | +- [`Vec::retain_mut`] |
| 161 | +- [`VecDeque::retain_mut`] |
| 162 | +- [`Write` for `Cursor<[u8; N]>`][cursor-write-array] |
| 163 | +- [`std::os::unix::net::SocketAddr::from_pathname`] |
| 164 | +- [`std::process::ExitCode`] and [`std::process::Termination`]. The stabilization of these two APIs now makes it possible for programs to return errors from `main` with custom exit codes. |
| 165 | +- [`std::thread::JoinHandle::is_finished`] |
| 166 | + |
| 167 | +These APIs are now usable in const contexts: |
| 168 | + |
| 169 | +- [`<*const T>::offset` and `<*mut T>::offset`][ptr-offset] |
| 170 | +- [`<*const T>::wrapping_offset` and `<*mut T>::wrapping_offset`][ptr-wrapping_offset] |
| 171 | +- [`<*const T>::add` and `<*mut T>::add`][ptr-add] |
| 172 | +- [`<*const T>::sub` and `<*mut T>::sub`][ptr-sub] |
| 173 | +- [`<*const T>::wrapping_add` and `<*mut T>::wrapping_add`][ptr-wrapping_add] |
| 174 | +- [`<*const T>::wrapping_sub` and `<*mut T>::wrapping_sub`][ptr-wrapping_sub] |
| 175 | +- [`<[T]>::as_mut_ptr`][slice-as_mut_ptr] |
| 176 | +- [`<[T]>::as_ptr_range`][slice-as_ptr_range] |
| 177 | +- [`<[T]>::as_mut_ptr_range`][slice-as_mut_ptr_range] |
| 178 | + |
| 179 | +Cargo |
| 180 | +----- |
| 181 | + |
| 182 | +No feature changes, but see compatibility notes. |
| 183 | + |
| 184 | +Compatibility Notes |
| 185 | +------------------- |
| 186 | + |
| 187 | +- Previously native static libraries were linked as `whole-archive` in some cases, but now rustc tries not to use `whole-archive` unless explicitly requested. This [change][93901] may result in linking errors in some cases. To fix such errors, native libraries linked from the command line, build scripts, or [`#[link]` attributes][link-attr] need to |
| 188 | + - (more common) either be reordered to respect dependencies between them (if `a` depends on `b` then `a` should go first and `b` second) |
| 189 | + - (less common) or be updated to use the [`+whole-archive`] modifier. |
| 190 | +- [Catching a second unwind from FFI code while cleaning up from a Rust panic now causes the process to abort][92911] |
| 191 | +- [Proc macros no longer see `ident` matchers wrapped in groups][92472] |
| 192 | +- [The number of `#` in `r#` raw string literals is now required to be less than 256][95251] |
| 193 | +- [When checking that a dyn type satisfies a trait bound, supertrait bounds are now enforced][92285] |
| 194 | +- [`cargo vendor` now only accepts one value for each `--sync` flag][cargo/10448] |
| 195 | +- [`cfg` predicates in `all()` and `any()` are always evaluated to detect errors, instead of short-circuiting.][94295] The compatibility considerations here arise in nightly-only code that used the short-circuiting behavior of `all` to write something like `cfg(all(feature = "nightly", syntax-requiring-nightly))`, which will now fail to compile. Instead, use either `cfg_attr(feature = "nightly", ...)` or nested uses of `cfg`. |
| 196 | +- [bootstrap: static-libstdcpp is now enabled by default, and can now be disabled when llvm-tools is enabled][94832] |
| 197 | + |
| 198 | +Internal Changes |
| 199 | +---------------- |
| 200 | + |
| 201 | +These changes provide no direct user facing benefits, but represent significant |
| 202 | +improvements to the internals and overall performance of rustc |
| 203 | +and related tools. |
| 204 | + |
| 205 | +- [debuginfo: Refactor debuginfo generation for types][94261] |
| 206 | +- [Remove the everybody loops pass][93913] |
| 207 | + |
| 208 | +[88375]: https://github.com/rust-lang/rust/pull/88375/ |
| 209 | +[89887]: https://github.com/rust-lang/rust/pull/89887/ |
| 210 | +[90621]: https://github.com/rust-lang/rust/pull/90621/ |
| 211 | +[92285]: https://github.com/rust-lang/rust/pull/92285/ |
| 212 | +[92472]: https://github.com/rust-lang/rust/pull/92472/ |
| 213 | +[92697]: https://github.com/rust-lang/rust/pull/92697/ |
| 214 | +[92714]: https://github.com/rust-lang/rust/pull/92714/ |
| 215 | +[92911]: https://github.com/rust-lang/rust/pull/92911/ |
| 216 | +[93263]: https://github.com/rust-lang/rust/pull/93263/ |
| 217 | +[93745]: https://github.com/rust-lang/rust/pull/93745/ |
| 218 | +[93827]: https://github.com/rust-lang/rust/pull/93827/ |
| 219 | +[93901]: https://github.com/rust-lang/rust/pull/93901/ |
| 220 | +[93913]: https://github.com/rust-lang/rust/pull/93913/ |
| 221 | +[93965]: https://github.com/rust-lang/rust/pull/93965/ |
| 222 | +[94081]: https://github.com/rust-lang/rust/pull/94081/ |
| 223 | +[94261]: https://github.com/rust-lang/rust/pull/94261/ |
| 224 | +[94295]: https://github.com/rust-lang/rust/pull/94295/ |
| 225 | +[94832]: https://github.com/rust-lang/rust/pull/94832/ |
| 226 | +[95016]: https://github.com/rust-lang/rust/pull/95016/ |
| 227 | +[95251]: https://github.com/rust-lang/rust/pull/95251/ |
| 228 | +[`+whole-archive`]: https://doc.rust-lang.org/stable/rustc/command-line-arguments.html#linking-modifiers-whole-archive |
| 229 | +[`Pin::static_mut`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_mut |
| 230 | +[`Pin::static_ref`]: https://doc.rust-lang.org/stable/std/pin/struct.Pin.html#method.static_ref |
| 231 | +[`Vec::retain_mut`]: https://doc.rust-lang.org/stable/std/vec/struct.Vec.html#method.retain_mut |
| 232 | +[`VecDeque::retain_mut`]: https://doc.rust-lang.org/stable/std/collections/struct.VecDeque.html#method.retain_mut |
| 233 | +[`std::os::unix::net::SocketAddr::from_pathname`]: https://doc.rust-lang.org/stable/std/os/unix/net/struct.SocketAddr.html#method.from_pathname |
| 234 | +[`std::process::ExitCode`]: https://doc.rust-lang.org/stable/std/process/struct.ExitCode.html |
| 235 | +[`std::process::Termination`]: https://doc.rust-lang.org/stable/std/process/trait.Termination.html |
| 236 | +[`std::thread::JoinHandle::is_finished`]: https://doc.rust-lang.org/stable/std/thread/struct.JoinHandle.html#method.is_finished |
| 237 | +[cargo/10448]: https://github.com/rust-lang/cargo/pull/10448/ |
| 238 | +[cursor-write-array]: https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#impl-Write-4 |
| 239 | +[link-attr]: https://doc.rust-lang.org/stable/reference/items/external-blocks.html#the-link-attribute |
| 240 | +[ptr-add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.add |
| 241 | +[ptr-offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.offset |
| 242 | +[ptr-sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.sub |
| 243 | +[ptr-wrapping_add]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_add |
| 244 | +[ptr-wrapping_offset]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_offset |
| 245 | +[ptr-wrapping_sub]: https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.wrapping_sub |
| 246 | +[slice-as_mut_ptr]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr |
| 247 | +[slice-as_mut_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_mut_ptr_range |
| 248 | +[slice-as_ptr_range]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.as_ptr_range |
| 249 | +[target_feature]: https://doc.rust-lang.org/reference/attributes/codegen.html#the-target_feature-attribute |
| 250 | + |
| 251 | + |
1 | 252 | Version 1.60.0 (2022-04-07)
|
2 | 253 | ==========================
|
3 | 254 |
|
|
0 commit comments