Rust 2021 版本工作组很高兴地宣布,Rust 的下一个版本 Rust 2021 计划在今年晚些时候发布。虽然正式引入此版本的 RFC 仍在开放中,但我们预计它很快就会被合并。规划和准备工作已经开始,并且我们正在按计划进行!
如果您好奇 Rust 2021 将引入哪些功能,或者在稳定版上发布该版本的时间表是什么,请继续阅读!
此版本包含哪些内容?
Rust 2021 中包含的功能的最终列表仍在确定中。总的来说,我们的目标是 Rust 2021 比 Rust 2018 版本小得多。这有以下几个原因:
- 为版本发布建立定期节奏意味着我们在版本级别获得了 Rust “列车” 发布模型的许多好处。
- Rust 2018 直接与 Rust “低压力” 发布的模型相悖。
- 只需要更少的破坏性更改即可继续发展该语言。
您可以在 RFC 中阅读有关版本概念演变的更多信息。
一个功能是否包含在 Rust 2021 中是 RFC 流程的一部分,因此从现在到版本发布之间,可能的功能列表可能会发生变化。话虽如此,以下是一些可能成为该版本一部分的可能功能:
序幕更改
虽然类型和自由函数可以独立于版本边界添加到序幕中,但对于特征来说并非如此。将特征添加到序幕中可能会导致兼容性问题,因为对与新引入范围的特征的方法同名的方法的调用可能会变得模棱两可。
目前,以下特征被提议包含在 Rust 2021 版本中:
TryFrom
/TryInto
FromIterator
此更改的 RFC 可以在 这里 找到。请注意,该 RFC 尚未合并,新序幕的内容仍在积极讨论中。
新的闭包捕获规则
RFC 2229 提出闭包应捕获单个字段,而不是在可能的情况下捕获整个结构体。此 RFC 已被接受。在某些情况下,此更改会导致析构函数在与当前不同的时间运行,因此该更改必须与版本绑定。将提供迁移 lint 以避免更改现有代码的语义。
Cargo 中新的默认功能解析器
在 Rust 1.51 中,Cargo 将稳定一个新的 功能解析器,它允许 crate 的依赖项在不同的上下文中使用不同的功能。例如,一个 #[no_std]
crate 可能希望将特定的依赖项用作构建依赖项(启用 std
)和常规依赖项(禁用 std
)。目前,这会导致在这两种情况下都启用 std
,因为功能属于全局命名空间。
在 Rust 2021 中,这个新的解析器将成为默认设置,但旧版本仍然可以通过选择使用新的解析器。
其他
其他提议的更改包括 统一 std
和 core
中 panic
的工作方式 以及将多个 lint 从 警告升级为错误。
您可以在 这里 找到正在考虑的所有功能的完整列表。
如果您知道某个功能已经讨论过包含在 Rust 的下一个版本中但未在此处列出,请告诉我们。虽然我们很高兴听到尚未讨论过包含在 Rust 版本中的其他功能,但在 Rust 2021 版本准备好发布之前,我们不太可能有时间讨论此类功能。
大致时间表
那么我们如何计划发布新版本呢?这是我们旨在实现的一些里程碑的时间表:
- 4月1日:所有相关的 RFC 要么合并,要么处于良好状态(即,所有主要决定都已达成,合并将在接下来的几周内发生)。
- 5月1日:Rust 2021 中包含的所有功能都在 feature flag 下的 nightly 版本中。
- 6月1日:所有 lint 都在 nightly 版本上实现。
- 9月1日:该版本在 nightly 版本上稳定。
- 10月21日:该版本在 stable 版本中发布。
随着我们接近这些截止日期,我们将把提议的更改列表缩小到那些已取得积极进展的项目。
参与呼吁
如果您有兴趣帮助发布 2021 版本,请 联系我们。除了功能工作和版本管理规划外,还有很多工作要做。版本发布需要进行的一些额外工作包括:
- 所有相关功能的
rustfix
迁移 - 测试所有功能及其迁移路径
- 博客文章和其他营销材料