Rust 团队很高兴宣布 Rust 的新版本 1.46.0。Rust 是一种编程语言,它使每个人都能构建可靠高效的软件。
如果您通过 rustup 安装了以前版本的 Rust,获取 Rust 1.46.0 就像
$ rustup update stable
如果您还没有,您可以从我们网站上的相应页面 获取 rustup
,并查看 GitHub 上的 1.46.0 的详细发布说明。
1.46.0 稳定版中的内容
此版本使 const fn
中出现许多新内容,两个新的标准库 API 和一个对库作者有用的功能。查看 详细的发布说明,了解本文未涵盖的其他更改。
const fn
改进
现在您可以在 const fn
中使用 几个核心语言功能
if
、if let
和match
while
、while let
和loop
&&
和||
运算符
您还可以 转换为切片
const fn foo() {
let x = [1, 2, 3, 4, 5];
// cast the array to a slice
let y: &[_] = &x;
}
虽然这些功能可能感觉不到新,因为您可以在 const fn
之外使用它们,但它们增加了大量的编译时计算能力!例如,const-sha1
crate 允许您在编译时计算 SHA-1 哈希值。这导致了 Microsoft 的 Rust WinRT 绑定 性能提高了 40 倍。
#[track_caller]
早在 3 月份,Rust 1.42 的发布引入了 当 unwrap
和相关函数出现恐慌时,更好的错误消息。当时,我们提到这种实现方式尚未稳定。Rust 1.46 使此功能稳定。
此属性称为 #[track_caller]
,最初是在 2017 年 7 月的 RFC 2091 中提出的!如果您正在编写像 unwrap
这样的可能出现恐慌的函数,您可以在函数上添加此注释,默认的恐慌格式化程序将使用其调用者作为其错误消息中的位置。例如,以下是之前的 unwrap
pub fn unwrap(self) -> T {
match self {
Some(val) => val,
None => panic!("called `Option::unwrap()` on a `None` value"),
}
}
现在看起来像这样
#[track_caller]
pub fn unwrap(self) -> T {
match self {
Some(val) => val,
None => panic!("called `Option::unwrap()` on a `None` value"),
}
}
就是这样!
如果您自己实现恐慌钩子,可以使用 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。没有你们,我们无法做到。 感谢!