Rust 1.53.0 发布
Rust 1.53.0 版本现已发布。此版本包含了几个新的 language features 和许多新的 library features,包括期待已久的数组 IntoIterator 的实现。
IntoIterator for arrays
这是第一个让数组实现 IntoIterator 特性的 Rust 版本,意味着你现在可以通过 value 来迭代数组了:
for i in [1, 2, 3] {
..
}
同样,你现在可以将数组传递给需要T: IntoIterator的 methods:
let set = BTreeSet::from_iter([1, 2, 3]);
for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) {
..
}
从这个版本开始,数组在实现 IntoIterator 时有一个小小的变通,以避免破坏代码。编译器将继续把 array.into_iter() 解析为 (&array).into_iter(),就像该 trait 实现不存在一样。这只适用于 .into_iter() 方法的调用语法,并不影响任何其他语法,如 for e in [1, 2, 3], iter.zip([1, 2, 3]) 或 IntoIterator::into_iter([1, 2, 3]) ,它们都能正常编译。
官方表示,由于 .into_iter() 的这种特殊情况只是为了避免破坏现有的代码而需要的,所以其在今年晚些时候发布的新版本 Rust 2021 中将被删除。更多信息可参见版本公告。
Or patterns
Pattern syntax 已扩展为支持|嵌套在 pattern 中的任何位置。这使得你可以编写Some(1 | 2),而不是Some(1) | Some(2)
match result {
Ok(Some(1 | 2)) => { .. }
Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. }
_ => { .. }
}
Unicode 标识符
标识符现在可以包含 non-ascii 字符。UAX #31 中定义的 Unicode 中的所有有效标识符字符。这包括来自许多不同脚本和语言的字符,但不包括表情符号。
编译器会对涉及不同脚本的潜在混淆情况提出警告。例如,使用看起来非常相似的标识符将导致一个警告。
warning: identifier pair considered confusable between `s` and `s`
在 Cargo 中支持 HEAD 分支名称
Cargo 不再假定 git 仓库的默认 HEAD 被命名为 master。这意味着你不再需要为来自默认分支为 main 的仓库的 git 依赖项指定branch = "main" 。
默认情况下增量编译保持关闭
增量编译在稳定版 Rust release channel 上已经默认关闭。该功能在 beta 版和 nightly release channels 上仍然可用。对于 1.53.0 稳定版,重新启用增量的方法与 1.52.1 相比没有变化。
有关更多信息,可参见详细的发行说明。