宣布 Rust 1.92.0
Source: Rust Blog
Rust 1.92.0 已发布
Rust 团队很高兴宣布 Rust 的新版本 1.92.0。Rust 是一种让每个人都能构建可靠且高效软件的编程语言。
如果你之前是通过 rustup 安装的 Rust,可以使用以下命令获取 1.92.0:
rustup update stable
如果你还没有安装,可以从我们网站的相应页面获取 rustup,并查看 1.92.0 的详细发行说明。
如果你想通过测试未来的发行版来帮助我们,考虑在本地切换到 beta 通道(rustup default beta)或 nightly 通道(rustup default nightly)。请报告你遇到的任何 bug!
1.92.0 稳定版的内容
默认拒绝的 never 类型 lint
语言和编译器团队继续推进对never 类型的稳定化工作。在本次发布中,never_type_fallback_flowing_into_unsafe 和 dependency_on_unit_never_type_fallback 这两个未来兼容性 lint 被设为默认拒绝(deny‑by‑default),这意味着检测到时会导致编译错误。
这些 lint 仍然可以通过 #[allow] 关闭,并且仅在直接构建受影响的 crate 时触发(作为依赖构建时不会触发,尽管 Cargo 会给出警告)。大约有 500 个 crate 受影响。更多理由请参见语言团队的评估。
unused_must_use 不再对 Result 发出警告
unused_must_use lint 会在忽略带有 #[must_use] 的结果时给出警告。现在它会忽略 Result(例如 Result)和 ControlFlow,避免对永远不会出现的错误发出警告。
use core::convert::Infallible;
fn can_never_fail() -> Result {
// …
Ok(())
}
fn main() {
can_never_fail(); // No warning
}
在错误类型有时可能是不可失败的 trait 中非常有用:
trait UsesAssocErrorType {
type Error;
fn method(&self) -> Result;
}
struct CannotFail;
impl UsesAssocErrorType for CannotFail {
type Error = core::convert::Infallible;
fn method(&self) -> Result {
Ok(())
}
}
struct CanFail;
impl UsesAssocErrorType for CanFail {
type Error = std::io::Error;
fn method(&self) -> Result {
Err(std::io::Error::other("something went wrong"))
}
}
fn main() {
CannotFail.method(); // No warning
CanFail.method(); // Warning: unused `Result` that must be used
}
在 Linux 上即使启用了 -Cpanic=abort 仍生成 unwind 表
之前,在 Rust 1.23 之后,使用 -Cpanic=abort 时回溯会失效。一个变通办法(-Cforce-unwind-tables=yes)在 1.45 中被稳定。现在在 Rust 1.92 中,即使指定了 -Cpanic=abort,也会默认生成 unwind 表。若想关闭它们,请使用 -Cforce-unwind-tables=no。
验证 #[macro_export] 的输入
编译器现在对 macro_export 允许的参数进行更严格的检查,并升级为“默认拒绝的 lint”,该 lint 也会在依赖中报告。详情请参见相关 PR。
稳定的 API
NonZero::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 for proc_macro::TokenStreamimpl Extend for proc_macro::TokenStreamimpl Extend for proc_macro::TokenStreamimpl Extend for proc_macro::TokenStream
常量‑稳定的 API
以下先前已稳定的 API 现在在 const 环境中也可用:
其他更改
- Rust 1.92.0 完整变更日志:
- Cargo 1.92.0 变更日志:
- Clippy 1.92.0 变更日志:
1.92.0 的贡献者
许多人齐心协力才完成了 Rust 1.92.0。没有大家我们做不到。谢谢!