Rust 团队很高兴地宣布 Rust 的新版本 1.46.0。Rust 是一门赋予每个人构建可靠且高效软件能力的编程语言。
如果你已经通过 rustup 安装了旧版本的 Rust,获取 Rust 1.46.0 非常简单,只需运行
$ rustup update stable
如果你还没有安装,你可以从我们网站上的相应页面获取 rustup,并在 GitHub 上查看1.46.0 的详细发行说明。
1.46.0 stable 版本有什么新变化
这个版本在 const fn 中启用了许多新功能,增加了两个新的标准库 API,以及一个对库作者有用的特性。请参阅详细发行说明以了解本文未涵盖的其他变更。
const fn 改进
有几个核心语言特性你现在可以在 const fn 中使用:
if,if let, 和matchwhile,while let, 和loop&&和||运算符
你还可以转换为 slice。
const
尽管这些特性在 const fn 之外早已可用,可能感觉不那么新,但它们为编译时计算增加了大量能力!例如,const-sha1 crate 可以在编译时计算 SHA-1 哈希。这使得 Microsoft 用于 Rust 的 WinRT 绑定获得了40 倍的性能提升。
#[track_caller]
回顾三月,Rust 1.42 版本引入了当 unwrap 及相关函数 panic 时更友好的错误信息。当时,我们提到这个实现的机制尚未稳定。Rust 1.46 稳定了这项特性。
这个属性叫做 #[track_caller],它最初在 2017 年 7 月的RFC 2091 中被提出!如果你在编写一个像 unwrap 这样可能会 panic 的函数,你可以在你的函数上加上这个标注,默认的 panic 格式化器就会在其错误信息中使用调用者的位置。例如,以下是以前的 unwrap 错误信息:
现在看起来像这样:
就这样!
如果你自己实现 panic hook,你可以使用 std::panic::Location 上的caller 方法来访问这些信息。
库变更
延续 const fn 改进的主题,std::mem::forget 现在是 const fn。此外,本版本还稳定了两个新的 API:
请参阅详细发行说明获取更多信息。
其他变更
Rust 1.46.0 版本还有其他变更:查看 Rust、Cargo 和 Clippy 中的变更。
1.46.0 的贡献者
许多人共同努力创建了 Rust 1.46.0。没有大家的支持,这一切是不可能实现的。感谢大家!