Skip to content

Commit ac57025

Browse files
committed
Announce Rust 1.92 stable release
1 parent 5856609 commit ac57025

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

content/Rust-1.92.0.md

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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

Comments
 (0)