Rust 团队很高兴地宣布 Rust 新版本 1.54.0 发布。Rust 是一种编程语言,旨在赋予每个人构建可靠和高效软件的能力。
如果您之前通过 rustup 安装了 Rust,那么获取 Rust 1.54.0 非常容易,只需运行:
$ rustup update stable
如果您还没有安装,您可以从我们网站上的相应页面获取 rustup
,并查看 GitHub 上 1.54.0 版本的详细发行说明。
1.54.0 稳定版有哪些新功能
特性(Attributes)可以调用类似函数的宏
Rust 1.54 支持在特性(attributes)内部调用类似函数的宏。类似函数的宏可以是基于 macro_rules!
的宏,也可以是像 macro!(...)
这样调用的过程宏。 这种用例的一个显著例子是将来自其他文件的文档包含到 Rust 文档注释中。例如,如果您的项目的 README 文件代表了一个良好的文档注释,您可以使用 include_str!
直接合并其内容。以前,各种变通方法允许类似的功能,但从 1.54 版本开始,这更加符合人体工程学。
#![doc = include_str!("README.md")]
宏也可以嵌套在特性(attribute)内部。 例如,concat!
宏可以用于从宏内部构建文档注释,该宏使用 stringify!
来包含替换。
macro_rules! make_function {
($name:ident, $value:expr) => {
#[doc = concat!("The `", stringify!($name), "` example.")]
///
/// # Example
///
/// ```
#[doc = concat!(
"assert_eq!(", module_path!(), "::", stringify!($name), "(), ",
stringify!($value), ");")
]
/// ```
pub fn $name() -> i32 {
$value
}
};
}
make_function! {func_name, 123}
阅读此处了解更多详情。
wasm32 intrinsics 稳定化
wasm32 平台的许多 intrinsics 已经稳定化,这使得可以访问 WebAssembly 中的 SIMD 指令。
值得注意的是,与之前稳定化的 x86
和 x86_64
intrinsics 不同,这些 intrinsics 没有安全要求,即仅在启用适当的目标特性时才被调用。 这是因为 WebAssembly 从一开始就被编写为在执行代码之前安全地验证代码,因此可以保证指令被正确解码(或根本不解码)。
这意味着我们可以将一些 intrinsics 公开为完全安全的函数,例如 v128_bitselect
。 然而,仍然有一些 intrinsics 是不安全的,因为它们使用原始指针,例如 v128_load
。
增量编译默认重新启用
在此版本中,增量编译已默认重新启用,此前在 1.52.1 版本中默认禁用。
在 Rust 1.52 中,从磁盘缓存加载增量编译数据时添加了额外的验证。 这导致许多先前存在的潜在健全性问题被发现,因为验证将这些静默错误更改为内部编译器错误 (ICE)。 作为回应,编译器团队决定在 1.52.1 补丁中禁用增量编译,允许用户避免遇到 ICE 和潜在的不健全性,但代价是编译时间更长。1
从那时起,我们进行了一系列回顾,贡献者一直在努力解决报告的问题,其中一些修复程序在 1.53 版本中落地,而大部分修复程序在此版本中落地。2
目前仍有两个已知问题可能导致 ICE。 由于缺乏自动崩溃报告,我们无法确定未解决问题的影响程度。 但是,根据我们从受 1.52 版本影响的用户收到的反馈,我们认为剩余问题在实践中很少见。
因此,增量编译已在此版本中重新启用!
稳定的 API
以下方法和 trait 实现已稳定。
BTreeMap::into_keys
BTreeMap::into_values
HashMap::into_keys
HashMap::into_values
arch::wasm32
VecDeque::binary_search
VecDeque::binary_search_by
VecDeque::binary_search_by_key
VecDeque::partition_point
其他更改
Rust 1.54.0 版本中还有其他更改:请查看 Rust、Cargo 和 Clippy 中的更改内容。
rustfmt 也在 1.54.0 版本中修复,以正确格式化嵌套的行外模块。 这可能会导致格式化与 1.53.0 rustfmt 忽略的文件不同的文件。 有关详细信息,请参见此处。
1.54.0 版本贡献者
许多人齐心协力创造了 Rust 1.54.0。 没有你们大家,我们不可能做到。谢谢!
-
1.52.1 版本说明包含对这些事件的更详细描述。↩