Rust 1.46.0 发布了,此版本带来了以下更新内容:
改进 const fn
现在可以在 const fn 中使用几种核心语言功能:
if
,if let
, andmatch
while
,while let
, andloop
- the
&&
and||
operators
还可以转换为 slice:
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]
#[track_caller] 属性最早于 2017 年提出。如果你正在编写类似 unwrap 之类可能会引发 panic 的功能,则可以将此注释放在函数上,默认的 panic 格式化程序将使用其调用方作为错误消息中的位置。例如,这是之前的 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"),
}
}
如果你自己实现了 panic 挂钩,也可以在 std::panic::Location 上使用调用方方法(caller method)来访问此信息。
Library changes
与 const fn 改进的主题保持一致,std::mem::forget 现在也是一个 const fn。此外,此版本还稳定了两个新的 API:
更新说明:https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html
转自 https://www.oschina.net/news/118208/rust-1-46-0-released?utm_source=new_idx