Rust 1.97.0 发布公告
摘要
Rust 1.97.0 已发布,默认启用符号修饰 v0,Cargo 支持禁止警告,并且链接器输出不再隐藏。
<p><a href="https://lobste.rs/s/o9edbl/announcing_rust_1_97_0">评论</a></p>
查看缓存全文
缓存时间: 2026/07/09 15:40
# 宣布 Rust 1.97.0 | Rust 博客
来源:https://blog.rust-lang.org/2026/07/09/Rust-1.97.0/
Rust 团队很高兴宣布 Rust 的一个新版本——1.97.0。Rust 是一种赋予每个人构建可靠高效软件能力的编程语言。
如果你已经通过 `rustup` 安装了之前版本的 Rust,可以通过以下命令获取 1.97.0:
``
$ rustup update stable
``
如果你尚未安装 `rustup`,可以从我们网站的相关页面获取(https://www.rust-lang.org/install.html),并查阅 1.97.0 的详细发布说明(https://doc.rust-lang.org/stable/releases.html#version-1970-2026-07-09)。
如果你想帮助我们测试未来版本,可以考虑在本地更新到 beta 频道(`rustup default beta`)或 nightly 频道(`rustup default nightly`)。如果你遇到任何 bug,请报告(https://github.com/rust-lang/rust/issues/new/choose)。
## 1.97.0 稳定版中的新变化
### 符号重整 v0 默认启用
当 Rust 被编译成目标文件和二进制文件时,每个项(函数、静态变量等)都必须有一个全局唯一的“符号”来标识它。为了避免链接不同 Rust 程序时发生冲突,Rust 会对项的原始名称进行重整,添加模块路径、定义 crate、泛型等额外上下文。历史上,这种重整基于 Itanium ABI(https://refspecs.linuxbase.org/cxxabi-1.86.html#mangling),后者(有时)也被 C++ 使用。
新的重整方案解决了之前方案的多个缺点:
- 泛型参数实例化保留其值,而不仅仅是依靠哈希来跟踪
- 不一致性:并非所有部分都使用 Itanium ABI,意味着仍然需要自定义去重整
自 Rust 1.59 起,编译器已支持通过 `-Csymbol-mangling-version=v0` 选择 Rust 专有的重整方案。自 2025 年 11 月起,该方案已在 nightly 上默认启用,1.97 则在稳定版 Rust 上启用。旧的重整方案只能在 nightly 上启用,目前的计划是完全移除它。
更多详情请参阅之前的博客文章(https://blog.rust-lang.org/2025/11/20/switching-to-v0-mangling-on-nightly/)。
### Cargo 支持拒绝警告
在 CI 中拒绝警告是一种常见做法。以往通常通过 `RUSTFLAGS=-Dwarnings` 实现。在 Rust 1.97 中,Cargo 控制警告如何影响构建成功:可以静默警告(通过 `allow` 级别)、在不失败的情况下显示(默认,`warn` 级别),或拒绝警告(通过 `deny` 级别)。
由于 Cargo 配置决定了行为,使用此功能不会使底层构建缓存失效,因此可以轻松临时启用。例如,如果在重构修复错误时警告增加了不必要的干扰,可以运行 `CARGO_BUILD_WARNINGS=allow cargo check`,临时静默警告。
在 CI 中,作业可以设置 `CARGO_BUILD_WARNINGS=deny` 来拒绝警告。这可以与 `--keep-going` 结合使用,以收集所有错误和警告,而不是在第一个失败的包处停止。
更多详情请参阅文档(https://doc.rust-lang.org/cargo/reference/config.html#buildwarnings)。
### 链接器输出不再默认隐藏
`rustc` 代表用户调用链接器。历史上,如果链接成功完成,`rustc` 默认会静默链接器输出。但这可能会掩盖真正的问题,因此在 Rust 1.97 中,我们默认启用链接器消息。这些消息会以警告 lint 的形式发出,例如:
``
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
``
常见的链接器消息(已被诊断出是误报或有意行为)会被 `rustc` 过滤掉。在 nightly 上不再隐藏此输出后,已经修复了一些缺陷。
请注意,目前 `linker_messages` 是一个特殊的 lint,**不**受 `warnings` lint 组的影响。这是有意为之,因为 `rustc` 通常不能精确控制链接器输出,并且某些输出可能只出现在部分平台上。如果你认为看到了链接器的误报输出,请提交 issue(https://github.com/rust-lang/rust/issues/new/choose)。
同时要静默该警告,可以将 lint 级别配置为 allow。可以通过在 `Cargo.toml` 中添加 lints 部分(https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-lints-section)来实现,如下所示:
``
[lints.rust]
linker_messages = "allow"
``
### 稳定化的 API
- `Default for RepeatN`(https://doc.rust-lang.org/stable/std/iter/struct.RepeatN.html#impl-Default-for-RepeatN%3CA%3E)
- `Copy for ffi::FromBytesUntilNulError`(https://doc.rust-lang.org/stable/std/ffi/struct.FromBytesUntilNulError.html#impl-Copy-for-FromBytesUntilNulError)
- `Send for std::fs::File` on UEFI(https://github.com/rust-lang/rust/pull/154003)
- `<\{integer\}\>::isolate\_highest\_one`(https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_highest_one)
- `<\{integer\}\>::isolate\_lowest\_one`(https://doc.rust-lang.org/stable/std/primitive.u32.html#method.isolate_lowest_one)
- `<\{integer\}\>::highest\_one`(https://doc.rust-lang.org/stable/std/primitive.u32.html#method.highest_one)
- `<\{integer\}\>::lowest\_one`(https://doc.rust-lang.org/stable/std/primitive.u32.html#method.lowest_one)
- `<\{uN\}\>::bit\_width`(https://doc.rust-lang.org/stable/std/primitive.u32.html#method.bit_width)
- `NonZero<\{integer\}\>::isolate\_highest\_one`(https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_highest_one)
- `NonZero<\{integer\}\>::isolate\_lowest\_one`(https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.isolate_lowest_one)
- `NonZero<\{integer\}\>::highest\_one`(https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.highest_one)
- `NonZero<\{integer\}\>::lowest\_one`(https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.lowest_one)
- `NonZero<\{uN\}\>::bit\_width`(https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.bit_width)
这些之前已稳定的 API 现在在 const 上下文中稳定:
- `char::is\_control`(https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_control)
### 其他变化
请查看 Rust(https://github.com/rust-lang/rust/releases/tag/1.97.0)、Cargo(https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-197-2026-07-09)和 Clippy(https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-197)的所有更改内容。
## 1.97.0 的贡献者
许多人共同创造了 Rust 1.97.0。没有你们,我们无法做到。谢谢!(https://thanks.rust-lang.org/rust/1.97.0/)
相似文章
宣布推出Rust版Zstandard
Trifecta Tech Foundation 宣布首次发布 libzstd-rs-sys,这是一个纯 Rust 实现的 Zstandard 压缩格式,可作为 C 参考实现的直接替代品,在轻微性能损失下提供更好的可移植性和内存安全性。
Symbolica 2.0: 面向Python和Rust的可编程符号
Symbolica 2.0是面向Python和Rust的符号计算框架的重大版本,引入了可编程符号、改进的Rust API、更丰富的输出格式(HTML、Typst、彩色)、用于求值的JIT编译以及更好的易用性。
将React编译器移植到Rust
一项将React编译器移植到Rust的计划,旨在提高性能并与Rust生态系统集成。
Bun 的 Rust 重写已合并
Bun,JavaScript 运行时和包管理器,已合并其核心从 Zig 到 Rust 的重写,可能提升性能和可维护性。
Rust 中的进行中工作
本文介绍了一种在 Rust 开发过程中延迟错误处理的技术和库,允许开发者临时将错误降级为警告,从而在保持正确性的同时维持生产力。