宣布 Rust 1.53.0

2021 年 6 月 17 日 · Rust 发布团队

Rust 团队很高兴宣布 Rust 的新版本 1.53.0。Rust 是一种编程语言,它赋予每个人构建可靠且高效软件的能力。

如果您之前通过 rustup 安装了 Rust,获取 Rust 1.53.0 就像

$ rustup update stable

如果您还没有,您可以从我们网站上的相应页面获取 rustup,并查看 GitHub 上的1.53.0 的详细发布说明

1.53.0 稳定版中的内容

此版本包含几个新的语言特性和许多新的库特性,包括期待已久的数组的 IntoIterator 实现。查看详细的发布说明,了解本文未涵盖的其他更改。

数组的 IntoIterator

这是第一个 Rust 版本,其中数组实现了 IntoIterator 特性。这意味着您现在可以通过值迭代数组

for i in [1, 2, 3] {
    ..
}

以前,这只能通过引用来实现,使用 &[1, 2, 3][1, 2, 3].iter()

类似地,您现在可以将数组传递给期望 T: IntoIterator 的方法

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()

从这个版本开始,数组实现了 IntoIterator,并使用了一个小的解决方法来避免破坏代码。编译器将继续将 array.into_iter() 解析为 (&array).into_iter(),就好像该特性实现不存在一样。这仅适用于 .into_iter() 方法调用语法,不影响任何其他语法,例如 for e in [1, 2, 3]iter.zip([1, 2, 3])IntoIterator::into_iter([1, 2, 3]),这些语法都可以正常编译。

由于此 .into_iter() 的特殊情况仅用于避免破坏现有代码,因此它将在今年晚些时候发布的新版本 Rust 2021 中删除。有关更多信息,请参阅版本公告

或模式

模式语法已扩展为支持在模式中的任何位置嵌套 |。这使您可以编写 Some(1 | 2) 而不是 Some(1) | Some(2)

match result {
     Ok(Some(1 | 2)) => { .. }
     Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. }
     _ => { .. }
}

Unicode 标识符

标识符现在可以包含非 ASCII 字符。现在可以使用 UAX #31 中定义的所有有效的 Unicode 标识符字符。这包括来自许多不同脚本和语言的字符,但不包括表情符号。

例如

const BLÅHAJ: &str = "🦈";

struct 人 {
    名字: String,
}

let α = 1;

编译器将警告涉及不同脚本的潜在混淆情况。例如,使用看起来非常相似的标识符会导致警告。

warning: identifier pair considered confusable between `s` and `s`

Cargo 中的 HEAD 分支名称支持

Cargo 不再假设 git 存储库的默认 HEAD 被命名为 master。这意味着您不再需要为来自默认分支名为 main 的存储库的 git 依赖项指定 branch = "main"

增量编译默认情况下仍然关闭

如之前在版本 1.52.1 的博客文章中所述,增量编译已在稳定的 Rust 发布渠道中默认关闭。该功能在 beta 和 nightly 发布渠道中仍然可用。对于 1.53.0 稳定版,重新启用增量的方法与 1.52.1 相同。

稳定的 API

以下方法和特性实现已稳定。

其他更改

Rust 1.53.0 版本中还有其他更改:查看RustCargoClippy 中的更改。

1.53.0 的贡献者

许多人共同创建了 Rust 1.53.0。没有你们,我们无法做到。 谢谢!