|
| 1 | ++++ |
| 2 | +path = "2025/12/11/Rust-1.92.0" |
| 3 | +title = "Announcing Rust 1.92.0" |
| 4 | +authors = ["The Rust Release Team"] |
| 5 | +aliases = ["releases/1.92.0"] |
| 6 | + |
| 7 | +[extra] |
| 8 | +release = true |
| 9 | ++++ |
| 10 | + |
| 11 | +The Rust team is happy to announce a new version of Rust, 1.92.0. Rust is a programming language empowering everyone to build reliable and efficient software. |
| 12 | + |
| 13 | +If you have a previous version of Rust installed via `rustup`, you can get 1.92.0 with: |
| 14 | + |
| 15 | +```console |
| 16 | +$ rustup update stable |
| 17 | +``` |
| 18 | + |
| 19 | +If you don't have it already, you can [get `rustup`](https://www.rust-lang.org/install.html) from the appropriate page on our website, and check out the [detailed release notes for 1.92.0](https://doc.rust-lang.org/stable/releases.html#version-1920-2025-12-11). |
| 20 | + |
| 21 | +If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (`rustup default beta`) or the nightly channel (`rustup default nightly`). Please [report](https://github.com/rust-lang/rust/issues/new/choose) any bugs you might come across! |
| 22 | + |
| 23 | +## What's in 1.92.0 stable |
| 24 | + |
| 25 | +### Deny-by-default never type lints |
| 26 | + |
| 27 | +The language and compiler teams continue to work on stabilization of the [never type](https://doc.rust-lang.org/stable/std/primitive.never.html). In this release the [`never_type_fallback_flowing_into_unsafe`](https://doc.rust-lang.org/beta/rustc/lints/listing/deny-by-default.html#dependency-on-unit-never-type-fallback) and [`dependency_on_unit_never_type_fallback`](https://doc.rust-lang.org/beta/rustc/lints/listing/deny-by-default.html#dependency-on-unit-never-type-fallback) future compatibility lints were made deny-by-default, meaning they will cause a compilation error when detected. |
| 28 | + |
| 29 | +These lints detect code which is likely to be broken by the never type stabilization. It is highly advised to fix them if they are reported in your crate. |
| 30 | + |
| 31 | +### `unused_must_use` no longer warns about `Result<(), UninhabitedType>` |
| 32 | + |
| 33 | +Rust's `unused_must_use` lint warns when ignoring the return value of a function, if the function or its return type is annotated with `#[must_use]`. For instance, this warns if ignoring a return type of `Result`, to remind you to use `?`, or something like `.expect("...")`. |
| 34 | + |
| 35 | +However, some functions return `Result`, but the error type they use is not actually "inhabited", meaning it can never exist in real code (e.g. the [`!`](https://doc.rust-lang.org/std/primitive.never.html) or [`Infallible`](https://doc.rust-lang.org/std/convert/enum.Infallible.html) types). |
| 36 | + |
| 37 | +The `unused_must_use` lint now no longer warns on `Result<(), UninhabitedType>`, or on `ControlFlow<UninhabitedType, ()>`. For instance, it will not warn on `Result<(), !>`. This avoids having to check for an error that can never happen. |
| 38 | + |
| 39 | +```rust |
| 40 | +fn can_never_fail() -> Result<(), !> { |
| 41 | + // ... |
| 42 | + Ok(()) |
| 43 | +} |
| 44 | + |
| 45 | +fn main() { |
| 46 | + can_never_fail() |
| 47 | +} |
| 48 | +``` |
| 49 | + |
| 50 | +This is particularly useful with the common pattern of a trait with an associated error type, where the error type may *sometimes* be infallible: |
| 51 | + |
| 52 | +```rust |
| 53 | +trait UsesAssocErrorType { |
| 54 | + type Error; |
| 55 | + fn method(&self) -> Result<(), Self::Error>; |
| 56 | +} |
| 57 | + |
| 58 | +struct CannotFail; |
| 59 | +impl UsesAssocErrorType for CannotFail { |
| 60 | + type Error = !; |
| 61 | + fn method(&self) -> Result<(), Self::Error> { |
| 62 | + Ok(()) |
| 63 | + } |
| 64 | +} |
| 65 | + |
| 66 | +struct CanFail; |
| 67 | +impl UsesAssocErrorType for CanFail { |
| 68 | + type Error = std::io::Error; |
| 69 | + fn method(&self) -> Result<(), Self::Error> { |
| 70 | + Err(std::io::Error::other("something went wrong")) |
| 71 | + } |
| 72 | +} |
| 73 | + |
| 74 | +fn main() { |
| 75 | + CannotFail.method(); // No error |
| 76 | + CanFail.method(); // Error: unused `Result` that must be used |
| 77 | +} |
| 78 | +``` |
| 79 | + |
| 80 | +### Emit unwind tables even when `-Cpanic=abort` is enabled on linux |
| 81 | + |
| 82 | +Backtraces with `-Cpanic=abort` previously worked in Rust 1.22 but were broken in Rust 1.23, as we stopped emitting unwind tables with `-Cpanic=abort`. In Rust 1.45 a workaround in the form of `-Cforce-unwind-tables=yes` was stabilized. |
| 83 | + |
| 84 | +In Rust 1.92 unwind tables will be emitted by default even when `-Cpanic=abort` is specified, allowing for backtraces to work properly. If unwind tables are not desired then users should use `-Cforce-unwind-tables=no` to explicitly disable them being emitted. |
| 85 | + |
| 86 | +### Validate input to `#[macro_export]` |
| 87 | + |
| 88 | +Over the past few releases, many changes were made to the way built-in attributes are processed in the compiler. This should greatly improve the error messages and warnings rust gives for built-in attributes and especially make these diagnostics more consistent among all of the over 100 built-in attributes. |
| 89 | + |
| 90 | +To give a small example, in this release specifically, Rust became stricter in checking what arguments are allowed to `macro_export` by [upgrading that check to a "deny-by-default lint" that will be reported in dependencies.](https://github.com/rust-lang/rust/pull/143857). |
| 91 | + |
| 92 | +### Restrictions on user code impls of `DerefMut` for `Pin` |
| 93 | + |
| 94 | +A soundness issue with `Pin` has been solved by preventing third-party crates from implementing `DerefMut` for `Pin<T>` when `T` is a local type that doesn't implement `DerefMut<Target: Unpin>`. |
| 95 | + |
| 96 | +### Stabilized APIs |
| 97 | + |
| 98 | +... |
| 99 | + |
| 100 | +These previously stable APIs are now stable in const contexts: |
| 101 | + |
| 102 | +... |
| 103 | + |
| 104 | +### Platform Support |
| 105 | + |
| 106 | +Refer to Rust’s [platform support page][platform-support] for more information on Rust’s tiered platform support. |
| 107 | + |
| 108 | +### Other changes |
| 109 | + |
| 110 | +Check out everything that changed in [Rust](https://github.com/rust-lang/rust/releases/tag/1.92.0), [Cargo](https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-192-2025-12-11), and [Clippy](https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-192). |
| 111 | + |
| 112 | +## Contributors to 1.92.0 |
| 113 | + |
| 114 | +Many people came together to create Rust 1.92.0. We couldn't have done it without all of you. [Thanks!](https://thanks.rust-lang.org/rust/1.92.0/) |
| 115 | + |
| 116 | +[platform-support]: https://doc.rust-lang.org/rustc/platform-support.html |
0 commit comments