Rust 2021 版本特性预览,以及工作计划

2022-06-30 16:54:35 浏览数 (1)

2021 年 3 月 4 日,由 Ryan Levick 代表 Rust 2021 版本工作组发布博文:Planning the Rust 2021 Edition。

译注:此为版本 edition,非 version。如 Rust 2018 edition,对应的 versionRust 1.31.0,其最重要的特性是 Non-lexical lifetimes(NLL)。笔者估计,Rust 2021 edition,会对应 Rust 1.51.0,语法演变不多。主要是关于 Cargo 的新特性方面,如 resolver(详细请参阅 Rust 1.51.0 已正式发布,及其新特性详述)。

Rust 2021 版本工作组很高兴地宣布:Rust 的下一代版本,Rust 2021,将定于今年(2021)晚些时候发布。虽然关于 Rust 2021 版本的 RFC 介绍,在形式上仍然是开放的,但我们预计,RFC 将很快会被合并。计划和准备已经开始,我们正在按计划进行!

如果你关注 Rust 2021 版本会引入什么特性,或者了解稳定版发布的时间线,请继续阅读!

Rust 2021 包含什么?

Rust 2021 的最终特性列表,仍在审定中。总的来说,相比 Rust 2018,Rust 2021 特性的发布目标要小得多。有以下几个原因:

  • 为版本发布确立一个有规律的节奏。在版本级别,采用 Rust “train(译注:比喻改进的一系列节奏感)” 的发布模型,会有许多好处。
  • Rust 2018,需要直接解决 Rust 的“低应力(low stress)”问题(Rust 2018 worked directly against the Rust model of “low stress” releases)。
  • Rust 语言演变方面,突破性变化较少。

您可以在 RFC 中,阅读到更多关于版本演变的信息。

特性是否会包含在 Rust 2021 中,是 RFC 审定过程的一部分。因此,从当前到发布的这段时间内,特性列表仍然可能会改变。也就是说,以下特性,可能会包含在 Rust 2021 版本中:

prelude 的变更

尽管类型和自由函数(译注:非成员函数),可以不受版本约束而添加到 prelude 中。但对于 trait 来说,情况并非如此。向 prelude 添加 trait 可能会导致兼容性问题:新进入作用域的 trait,其包含的方法可能会有重名,从而导致对方法的调用会变得模棱两可。

目前,建议将以下 trait 纳入到 Rust 2021 版本:

  • TryFrom/TryInto
  • FromIterator

此变更的 RFC 可通过此链接查阅。请注意,RFC 尚未合并,prelude 的新内容仍在积极讨论中。

新的闭包捕获规则

RFC 2229 建议:在可能的情况下,闭包捕获单个字段,而非整个结构体。此 RFC 已被接受。在某些情况下,此变更将导致析构函数与当前版本的运行不同。因此,必须将此变更关联到新版本。后续,将会提供代码迁移的 lint 工具,以避免更改现有代码的语义。

Cargo 新特性 resolver

在 Rust 1.51 中,Cargo 将有一个稳定的新特性 resolver(详细请参阅 Rust 1.51.0 已正式发布,及其新特性详述),resolver 允许 crate 的依赖项在不同的上下文中使用不同的特性。例如,#[no_std] crate 可能希望:将特定的依赖项用作构建(build)依赖项,启用 std;而常规依赖项,则禁用 std。目前,因为特性属于全局命名空间,所以会导致在这两种情况下都将启用 std

在 Rust 2021 版本中,这个新的 resolver 将成为默认的。但是 Rust 2018 版本中,仍然可以对新的 resolver 选择使用。

译注:Rust 2018 版本中,可以通过在 Cargo.toml 中加入一行设定,来启用Cargo 新特性 resolver。笔者项目中已经尝鲜

代码语言:javascript复制
[package]
resolver = "2"
# 或者,你使用 workspace
[workspace]
resolver = "2"

其它

其它提议的变更包括:统一 stdcore 中的 panic,以及将一些 lint 从警告升级为错误。

正在考虑中的完整特性列表,请参阅此链接。

如果您关注于一个特性,其已经在讨论,并被包含在 Rust 的下一个版本中,但却没有在完整特性列表中列出,请告知我们。虽然,我们很高兴听到更多还没有被讨论的功能,但可能直到 Rust 2021 版本准备发布,我们也不太可能有精力来讨论所有功能。

时间线粗估

以下是目标里程碑的时间表:

  • 4 月 1 日:所有相关 RFC 合并,或处于良好状态(即,所有达成的重大决策和合并,将在接下来的几周内进行)。
  • 5 月 1 日:Rust 2021 中包含的所有特性,将包含在 nightly 版本中。
  • 6 月 1 日:所有 lints 将包含在 nightly 版本中。
  • 9 月 1 日:Rust 2021 在 nightly 版本中稳定。
  • 10 月 21 日:Rust 2021 版本稳定。

当接近最后期限时,我们将缩小那些已经取得积极进展的项目,并拟议变更清单。

参与邀请

如果您有兴趣对 Rust 2021 版本的发布提供帮助,请联系我们。除了特性转向工作和版本管理规划之外,还有很多工作要做。版本发布需要执行的一些附加工作项包括:

  • 所有相关特性的 rustfix 迁移
  • 测试所有特性及其迁移路径
  • 博客文章和其它宣传材料

谢谢您的阅读!

0 人点赞