Rust 1.54.0 发布,默认重新启用增量编译
Rust 1.54.0 现已发布,具体更新内容如下:
属性可以调用 function-like macros
Rust 1.54 支持在属性中调用 function-like macros。Function-like macros 可以是基于 macro_rules! 的,也可以是像macro!(...) 那样被调用的 procedural macros。这方面一个值得注意的用例是将其他文件的文档纳入 Rust 文档的注释中。例如,如果你的项目的 README 是一个很好的文档注释,你可以使用 include_str! 来直接合并内容。
#![doc = include_str!("README.md")]
宏也可以嵌套在属性中,例如包含由构建脚本生成的内容:
#[path = concat!(env!("OUT_DIR"), "/generated.rs")]
mod generated;
阅读此处了解更多详情。
wasm32 intrinsics 稳定化
wasm32 平台的许多 intrinsics 已经稳定,可以访问 WebAssembly 中的 SIMD 指令。
值得注意的是,与之前稳定的 x86 和 x86_64 intrinsics 不同,这些没有安全要求,只有在适当的目标特性被启用时才能被调用。这是因为 WebAssembly 从一开始就是为了在执行代码之前安全地验证代码而编写的,因此可以保证指令被正确解码(或者根本不解码)。
这意味着我们可以将一些 intrinsics 公开为完全安全的函数,例如v128_bitselect。 但是,仍然有一些 intrinsics 是不安全的,因为它们使用了原始指针,例如v128_load。
默认情况下重新启用增量编译
在 1.52.1 中默认禁用增量编译后,此版本中默认重新启用了增量编译。
在 Rust 1.52 中,当从磁盘缓存加载增量编译数据时,增加了额外的验证。这导致了许多预先存在的潜在问题被发现,因为验证将这些错误变成了内部编译器错误(ICE)。目前仍存在两个已知问题可能会导致 ICE。由于缺乏自动崩溃报告,开发团队无法确定未决问题的全部影响程度。但是,根据其从受 1.52 版本影响的用户那里收到的反馈,他们认为剩余的问题在实践中很少见。 因此,在此版本中重新启用了增量编译。
稳定的 API
BTreeMap::into_keysBTreeMap::into_valuesHashMap::into_keysHashMap::into_valuesarch::wasm32VecDeque::binary_searchVecDeque::binary_search_byVecDeque::binary_search_by_keyVecDeque::partition_point
其他变化
Rust 1.54.0 版本中还有其他更改:可查看 Rust、Cargo 和 Clippy 中的更改。
rustfmt 也在 1.54.0 版本中得到修复,以正确格式化嵌套的外联模块。这可能会导致 1.53.0 rustfmt 忽略的文件格式发生变化。在此处查看详细信息。
有关更多信息,可参见详细的发行说明。