Announcing Rust 1.97.0
摘要
Rust 团队宣布 Rust 1.97.0 稳定版发布。可以通过 rustup 更新到此版本。如果未安装 rustup,可从官网获取并查看详细发布说明。鼓励测试未来版本,可切换 beta 或 nightly 通道上报问题。稳定版更新包括:符号 mangling v0 默认启用(基于 Rust 专用方案,解决泛型实例化保留值、历史不一致等问题);Cargo 支持通过 CARGO_BUILD_WARNINGS 控制警告级别(allow / silence、warn、deny),不影响构建缓存,可临时用于检查后重构;rustc 不再默认隐藏链接器输出(作为警告 lint 发出,已修复多个问题);以及多个 API 在 const 上下文中稳定,如 RepeatN 默认值、FromBytesUntilNulError 的 Copy、std::fs::File 在 UEFI 上的 Send 等。
荐读理由
Rust 1.97 稳定版默认启用 Symbol mangling v0,避开 Itanium ABI 固有不一致和泛型实例化 hash 问题;Cargo 直接支持 RUSTFLAGS=-Dwarnings 替代方式,CI 配合 --keep-going 能一次性收集全包错误警告;rustc 默认不隐藏 linker 消息,可提前捕捉跨平台假阳性或真实问题。这些变动直接可用在独立 AI 工程项目,无需额外配置
原文
Announcing Rust 1.97.0
July 9, 2026 · The Rust Release Team
The Rust team is happy to announce a new version of Rust, 1.97.0. Rust is a programming language empowering everyone to build reliable and efficient software.
If you have a previous version of Rust installed via rustup, you can get 1.97.0 with:
$ rustup update stable
If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes for 1.97.0.
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 any bugs you might come across!
What's in 1.97.0 stable
Symbol mangling v0 enabled by default
When Rust is compiled into object files and binaries, each item (functions, statics, etc) must have a globally unique "symbol" identifying it. To avoid conflicts when linking together different Rust programs, Rust mangles the original name of items to include additional context such as the module path, defining crate, generics, and more. Historically, this mangling was based on the Itanium ABI, also (sometimes) used by C++.
The new mangling scheme resolves a number of drawbacks from the previous one:
Generic parameter instantiations preserve their values, rather than being tracked solely behind a hash
Inconsistencies: not all parts used the Itanium ABI, meaning that custom demangling was still necessary
Since Rust 1.59, the compiler has supported opting into a Rust-specific mangling scheme via -Csymbol-mangling-version=v0. Since November 2025, this scheme has been enabled by default on nightly, and 1.97 is now enabling it on stable Rust. The legacy mangling scheme can only be enabled on nightly, and the current plan is to fully remove it.
See the previous blog post for more details.
Cargo support for denying warnings
It's common practice to deny warnings in CI. Historically, doing so is typically done through RUSTFLAGS=-Dwarnings. With Rust 1.97, Cargo controls how warnings interact with build success: either silencing them (via allow level), rendering without failing (default, warn), or denying them (via deny).
As a result of Cargo configuration determining the behavior, using this feature doesn't invalidate the underlying build cache, meaning that it's easy to temporarily opt-in. For example, if warnings are adding unwanted noise while working through fixing errors after a refactor, you can run CARGO_BUILD_WARNINGS=allow cargo check, temporarily silencing them.
In CI, jobs can instead set CARGO_BUILD_WARNINGS=deny to deny warnings. This can be combined with --keep-going to collect all errors and warnings rather than stopping on the first failing package.
See the documentation for more details.
Linker output no longer hidden by default
rustc invokes a linker on behalf of users. Historically, rustc has silenced linker output by default if the link completes successfully. This can mask real problems, though, so in Rust 1.97 we are enabling linker messages by default. These are emitted as a warning lint, for example:
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
Common linker messages that have been diagnosed as false positives or intentional behavior are filtered out by rustc. Several defects have already been fixed as a result of no longer hiding this output on nightly.
Note that currently, linker_messages is a special lint that is not affected by the warnings lint group. This is intentional as rustc generally doesn't control linker output as precisely, and it's not uncommon for output to only appear on some platforms. If you are seeing what you think is a false positive output from the linker, please file an issue.
To silence the warning in the mean time, you can configure the lint level to allow. This can be done through Cargo.toml by adding a lints section like this:
[lints.rust]
linker_messages = "allow"
Stabilized APIs
These previously stable APIs are now stable in const contexts:
Other changes
Check out everything that changed in Rust, Cargo, and Clippy.
Contributors to 1.97.0
Many people came together to create Rust 1.97.0. We couldn't have done it without all of you. Thanks!
这条对你有帮助吗?