Rust 1.97.0 发布公告

Lobsters Hottest 工具

摘要

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

Lobsters Hottest

Trifecta Tech Foundation 宣布首次发布 libzstd-rs-sys,这是一个纯 Rust 实现的 Zstandard 压缩格式,可作为 C 参考实现的直接替代品,在轻微性能损失下提供更好的可移植性和内存安全性。

Symbolica 2.0: 面向Python和Rust的可编程符号

Lobsters Hottest

Symbolica 2.0是面向Python和Rust的符号计算框架的重大版本,引入了可编程符号、改进的Rust API、更丰富的输出格式(HTML、Typst、彩色)、用于求值的JIT编译以及更好的易用性。

Bun 的 Rust 重写已合并

Lobsters Hottest

Bun,JavaScript 运行时和包管理器,已合并其核心从 Zig 到 Rust 的重写,可能提升性能和可维护性。

Rust 中的进行中工作

Lobsters Hottest

本文介绍了一种在 Rust 开发过程中延迟错误处理的技术和库,允许开发者临时将错误降级为警告,从而在保持正确性的同时维持生产力。