NiQin (blog: 泥芹) shared the aphorism --
I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all. -- 《圣经》

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

💥 内容涉及著作权,均归属作者本人。若非作者注明,默认欢迎转载:请注明出处,及相关链接。

Summary: Rust 的下一代版本,Rust 2021,将定于今年(2021)晚些时候发布。包括:`prelude` 的变更、新的闭包捕获规则、统一 std 和 core 中的 panic,以及将一些 lint 从警告升级为错误。目标里程碑的时间表: 4 月 1 日:所有相关 RFC 合并,或处于良好状态(即,所有达成的重大决策和合并,将在接下来的几周内进行)。 5 月 1 日:Rust 2021 中包含的所有特性,将包含在 nightly 版本中。 6 月 1 日:所有 lints 将包含在 nightly 版本中。 9 月 1 日:Rust 2021 在 nightly 版本中稳定。 10 月 21 日:Rust 2021 版本稳定。

Topics: rust rust-官方博客 rust-2021-edition rust-2021-版本

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。笔者项目中已经尝鲜,建议启用

[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 迁移
  • 测试所有特性及其迁移路径
  • 博客文章和其它宣传材料

谢谢您的阅读!


Related Articles

  1. [Rust] iRust.net:基于 Rust-Web 技术栈,及 image-rs、fluent-rs、rhai-script ……
  2. [WebAssembly] yew SSR 服务器端渲染
  3. [Rust] async-std 创建者对于最近“项目是否已死?”,移除对其支持等的答复
  4. [Rust] Rust 1.56.0 版本和 Rust 2021 版次发布,新特性一览,及项目的迁移、升级
  5. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 博客应用的体验报告
  6. [Rust] Rust 官方周报 399 期(2021-07-14)
  7. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(5)- 构建 HTTP 请求、与外部服务器通信的两种方法
  8. [Rust] Rust 官方周报 398 期(2021-07-07)
  9. [Rust] Rust 官方周报 397 期(2021-06-30)
  10. [Rust] Rust 官方周报 396 期(2021-06-23)
  11. [Rust] Rust 官方周报 395 期(2021-06-16)
  12. [Rust] Rust 1.53.0 明日发布,关键新特性一瞥
  13. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(3)- rhai 脚本、静态/资源文件、环境变量等
  14. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(2)- 获取并解析 GraphQL 数据
  15. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(1)- crate 选择及环境搭建
  16. [Rust] Rust 官方周报 394 期(2021-06-09)
  17. [Rust] Rust web 前端库/框架评测,以及和 js 前端库/框架的比较
  18. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(4)- 获取 GraphQL 数据并解析
  19. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(3)- 资源文件及小重构
  20. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(2)- 组件和路由
  21. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(1)- 起步及 crate 选择
  22. [Rust] Rust 官方周报 393 期(2021-06-02)
  23. [Rust] Rust 官方周报 392 期(2021-05-26)
  24. [Rust] Rust 中,对网址进行异步快照,并添加水印效果的实践
  25. [Rust] Rust 官方周报 391 期(2021-05-19)
  26. [Rust] Rust,风雨六载,砥砺奋进
  27. [Rust] 为什么我们应当将 Rust 用于嵌入式开发?
  28. [Rust] Rust 官方周报 390 期(2021-05-12)
  29. [Rust] Rust + Android 的集成开发设计
  30. [Rust] Rust 1.52.1 已正式发布,及其新特性详述
  31. [Rust] 让我们用 Rust 重写那些伟大的软件吧
  32. [Rust] Rust 1.52.0 已正式发布,及其新特性详述
  33. [Rust] Rust 官方周报 389 期(2021-05-05)
  34. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(4) - 变更服务,以及小重构
  35. [Rust] Rust 1.52.0 稳定版预发布测试中,关键新特性一瞥
  36. [Rust] Rust 生态中,最不知名的贡献者和轶事
  37. [Rust] Rust 基金会迎来新的白金会员:Facebook
  38. [Rust] Rustup 1.24.1 已官宣发布,及其新特性详述
  39. [Rust] Rust 官方周报 388 期(2021-04-28)
  40. [Rust] Rust 官方周报 387 期(2021-04-21)
  41. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(4)- 变更服务,以及第二次重构
  42. [Rust] Rustup 1.24.0 已官宣发布,及其新特性详述
  43. [Rust] basedrop:Rust 生态中,适用于实时音频的垃圾收集器
  44. [Rust] Rust 编译器团队对成员 Aaron Hill 的祝贺
  45. [Rust] Jacob Hoffman-Andrews 加入 Rustdoc 团队
  46. [机器人] 为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐
  47. [Rust] rust-lang.org、crates.io,以及 docs.rs 的管理,已由 Mozilla 转移到 Rust 基金会
  48. [Rust] Rust 官方周报 386 期(2021-04-14)
  49. [Rust] Rust 编译器(Compiler)团队 4 月份计划 - Rust Compiler April Steering Cycle
  50. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(3) - 重构
  51. [Rust] 头脑风暴进行中:Async Rust 的未来熠熠生辉
  52. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(2) - 查询服务
  53. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务 - 起步及 crate 选择
  54. [Rust] Rust 2021 版本特性预览,以及工作计划
  55. [Rust] Rust 用在生产环境的 42 家公司
  56. [Rust] 构建最精简的 Rust Docker 镜像
  57. [Rust] Rust 官方周报 385 期(2021-04-07)
  58. [Rust] 使用 Rust 做异步数据采集的实践
  59. [Rust] Android 支持 Rust 编程语言,以避免内存缺陷
  60. [Rust] Android 平台基础支持转向 Rust
  61. [Rust] Android 团队宣布 Android 开源项目(AOSP),已支持 Rust 语言来开发 Android 系统本身
  62. [Rust] RustyHermit——基于 Rust 实现的下一代容器 Unikernel
  63. [Rust] Rustic:完善的纯粹 Rust 技术栈实现的国际象棋引擎,多平台支持(甚至包括嵌入式设备树莓派 Raspberry Pi、Buster)
  64. [Rust] Rust 迭代器(Iterator trait )的要诀和技巧
  65. [Rust] 使用 Rust 极致提升 Python 性能:图表和绘图提升 24 倍,数据计算提升 10 倍
  66. [Rust] 【2021-04-03】Rust 核心团队人员变动
  67. [Rust] Rust web 框架现状【2021 年 1 季度】
  68. [Rust] Rust 官方周报 384 期(2021-03-31)
  69. [Rust] Rust 中的解析器组合因子(parser combinators)
  70. [生活] 毕马威(KPMG)调查报告:人工智能的实际采用,在新冠疫情(COVID-19)期间大幅提升
  71. [Python] HPy - 为 Python 扩展提供更优秀的 C API
  72. [Rust] 2021 年,学习 Rust 的网络资源推荐(2)
  73. [Rust] 2021 年,学习 Rust 的网络资源推荐
  74. [生活] 况属高风晚,山山黄叶飞——彭州葛仙山露营随笔
  75. [Rust] Rust 1.51.0 已正式发布,及其新特性详述
  76. [Rust] 为 Async Rust 构建共享的愿景文档—— Rust 社区的讲“故事”,可获奖
  77. [Rust] Rust 纪元第 382 周最佳 crate:ibig 的实践,以及和 num crate 的比较
  78. [Rust] Rust 1.51.0 稳定版本改进介绍
  79. [Rust] Rust 中将 markdown 渲染为 html
  80. [生活] 国民应用 App 的用户隐私数据窥探
  81. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(3)- 重构
  82. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(2)- 查询服务
  83. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(1)- 起步及 crate 选择
  84. [Rust] Rust 操控大疆可编程 tello 无人机

Topics

rust(84)

graphql(17)

rust-官方周报(17)

webassembly(16)

wasm(10)

tide(9)

async-graphql(9)

yew(9)

rust-web(8)

rust-官方博客(8)

this-week-in-rust(6)

mysql(5)

actix-web(5)

rbatis(5)

android(4)

mongodb(3)

json-web-token(3)

jwt(3)

cargo(3)

技术延伸(3)

rust-wasm(3)

trunk(3)

handlebars(3)

rhai(3)

async-std(3)

用户隐私(2)

学习资料(2)

python(2)

ai(2)

人工智能(2)

postgresql(2)

rust-compiler(2)

rust-基金会(2)

rust-foundation(2)

rustup(2)

rust-toolchain(2)

rust-工具链(2)

rust-游戏开发(2)

rust-区块链(2)

rust-2021(2)

graphql-client(2)

surf(2)

rust-game(2)

rusthub(2)

tello(1)

drone(1)

无人机(1)

隐私数据(1)

markdown(1)

html(1)

crate(1)

async(1)

异步(1)

旅游(1)

不忘生活(1)

葛仙山(1)

hpy(1)

python-扩展(1)

正则表达式(1)

解析器组合因子(1)

组合器(1)

regular-expression(1)

parser-combinator(1)

regex(1)

官方更新(1)

rust-工作招聘(1)

rust-技术资料(1)

rust-周最佳-crate(1)

rust-web-框架(1)

rust-web-framework(1)

rust-核心团队(1)

rust-core-team(1)

rust-language-team(1)

pyo3(1)

rust-python-集成(1)

python-性能改进(1)

迭代器(1)

iterator-trait(1)

国际象棋(1)

chess(1)

游戏引擎(1)

game-engine(1)

虚拟化(1)

unikernel(1)

rustyhermit(1)

linux(1)

virtualization(1)

sandboxing(1)

沙箱技术(1)

数据采集(1)

异步数据采集(1)

docker(1)

镜像(1)

生产环境(1)

rust-评价(1)

rust-2021-edition(1)

rust-2021-版本(1)

graphql-查询(1)

vision-doc(1)

愿景文档(1)

代码重构(1)

steering-cycle(1)

方向周期(1)

隐私声明(1)

机器人(1)

robotics(1)

rustdoc(1)

rust-编译器(1)

实时音频(1)

real-time-audio(1)

变更服务(1)

mutation(1)

查询服务(1)

query(1)

rust-贡献者(1)

rust-轶事(1)

rust-稳定版(1)

rust-预发布(1)

rust-测试(1)

安全编程(1)

可信计算(1)

安全代码(1)

secure-code(1)

rust-android-integrate(1)

rust-embedded(1)

rust-嵌入式(1)

rust-生产环境(1)

rust-production(1)

网页快照(1)

网页截图(1)

水印效果(1)

图片水印(1)

yew-router(1)

css(1)

web-前端(1)

wasm-bindgen(1)

区块链(1)

blockchain(1)

dotenv(1)

标识符(1)

rust-1.53.0(1)

rust-1.56.0(1)

rust-项目升级(1)

异步运行时(1)

ssr(1)

tokio(1)

warp(1)

reqwest(1)

graphql-rust(1)


Elsewhere

- Open Source
  1. github/zzy
  2. github/sansx
- Learning & Studying
  1. Rust 学习资料 - iRust.net