宣布 Rust 1.92.0
2025年12月11日 · Rust 发布团队
Rust 团队很高兴地宣布新版本 Rust 1.92.0。Rust 是一种编程语言,旨在让每个人都能构建可靠且高效的软件。
如果您已经通过 rustup 安装了旧版本的 Rust,您可以通过以下命令获取 1.92.0:
|
|
如果尚未安装 rustup,您可以从我们网站的相关页面获取,并查看 1.92.0 的详细发布说明。
如果您想通过测试未来版本来帮助我们,可以考虑在本地更新到 beta 频道 (rustup default beta) 或 nightly 频道 (rustup default nightly)。请报告您可能遇到的任何错误!
1.92.0 稳定版中的内容
默认拒绝的 never 类型 lint
语言和编译器团队继续致力于稳定 never 类型。在此版本中,never_type_fallback_flowing_into_unsafe 和 dependency_on_unit_never_type_fallback 这两个未来兼容性 lint 被设置为默认拒绝,这意味着检测到它们时会导致编译错误。
值得注意的是,虽然这可能导致编译错误,但它仍然是一个 lint;这些 lint 都可以通过 #[allow] 来允许。此外,这些 lint 只会在直接构建受影响的 crate 时触发,而不会在它们作为依赖项构建时触发(不过 Cargo 在这种情况下会报告警告)。
这些 lint 检测可能因 never 类型稳定化而被破坏的代码。如果它们在您的 crate 图中被报告,强烈建议修复它们。
我们认为大约有 500 个 crate 受到此 lint 的影响。尽管如此,我们认为这是可以接受的,因为 lint 不是破坏性变更,并且它将允许未来稳定 never 类型。更深入的论证,请参阅语言团队的评估。
unused_must_use 不再对 Result<(), UninhabitedType> 发出警告
Rust 的 unused_must_use lint 会在忽略函数的返回值时发出警告,如果函数或其返回类型带有 #[must_use] 注解。例如,如果忽略 Result 返回类型,它会发出警告,以提醒您使用 ? 或类似 .expect("...") 的处理。
然而,有些函数返回 Result,但它们使用的错误类型实际上不是“可构造的”,意味着您无法构造该类型的任何值(例如 ! 或 Infallible 类型)。
unused_must_use lint 现在不再对 Result<(), UninhabitedType> 或 ControlFlow<UninhabitedType, ()> 发出警告。例如,它不会对 Result<(), Infallible> 发出警告。这避免了必须检查永远不会发生的错误。
|
|
这对于带有关联错误类型的 trait 的常见模式特别有用,其中错误类型有时可能是不可失败的:
|
|
在 Linux 上即使启用 -Cpanic=abort 也生成展开表
在 Rust 1.22 中,带有 -Cpanic=abort 的堆栈回溯可以工作,但在 Rust 1.23 中被破坏,因为我们停止在使用 -Cpanic=abort 时生成展开表。在 Rust 1.45 中,以 -Cforce-unwind-tables=yes 形式的工作区被稳定。
在 Rust 1.92 中,即使指定了 -Cpanic=abort,默认也会生成展开表,从而允许堆栈回溯正常工作。如果不需要展开表,用户应使用 -Cforce-unwind-tables=no 来显式禁用其生成。
验证 #[macro_export] 的输入
在过去的几个版本中,编译器处理内置属性的方式发生了许多变化。这应该会大大改善 Rust 对内置属性给出的错误信息和警告,尤其是使这些诊断信息在所有 100 多个内置属性中更加一致。
举个小例子,在这个版本中,Rust 在检查 macro_export 允许哪些参数时变得更加严格,通过将该检查升级为“默认拒绝的 lint”,该 lint 将在依赖项中被报告。
稳定化的 API
NonZero<u{N}>::div_ceilLocation::file_as_c_strRwLockWriteGuard::downgradeBox::new_zeroedBox::new_zeroed_sliceRc::new_zeroedRc::new_zeroed_sliceArc::new_zeroedArc::new_zeroed_slicebtree_map::Entry::insert_entrybtree_map::VacantEntry::insert_entryimpl Extend<proc_macro::Group> for proc_macro::TokenStreamimpl Extend<proc_macro::Literal> for proc_macro::TokenStreamimpl Extend<proc_macro::Punct> for proc_macro::TokenStreamimpl Extend<proc_macro::Ident> for proc_macro::TokenStream
以下先前已稳定的 API 现在在常量上下文中稳定:
<[_]>::rotate_left<[_]>::rotate_right
其他更改
查看 Rust、Cargo 和 Clippy 中的所有更改。
1.92.0 的贡献者
许多人齐心协力创造了 Rust 1.92.0。没有你们所有人,我们无法完成这项工作。谢谢!