Rust 2018 年路线图

2018 年 3 月 12 日 · Rust 核心团队

每年,Rust 社区都会聚集在一起制定路线图。今年,除了调查之外,我们在 12 月发起了征集博客文章的活动,最终在几周内产生了100 篇博客文章。最终结果是最近合并的2018 年路线图 RFC

Rust:2018 版

今年,我们将推出 Rust 2018,标志着自 1.0 版(即 Rust 2015 版)以来 Rust 的第一个主要新版本。

我们将照常每六周发布一个版本。但我们会将今年后三分之一(Rust 1.29 - 1.31)的一个版本指定为 Rust 2018。Rust 的这个新“版本”将是全年功能稳定工作的集大成者,并将提供完善的文档、工具和与这些功能相关的库。

“版本”(edition) 的概念是为了标志 Rust 演进中的重要里程碑,其中一系列新功能或习语作为一个整体,改变了使用 Rust 的体验。它们提供了每隔几年一次的机会,来回顾我们每六周交付的工作成果。讲述 Rust 发展方向的更宏大故事。并将整个技术栈作为一个完善的产品发布。

我们期望每个版本都有一个核心主题或重点。将 1.0 版视为“Rust 2015 版”,那么我们有

  • Rust 2015:稳定性
  • Rust 2018:生产力

Rust 2018 版中将包含什么?

路线图并不能确定说明 Rust 2018 版将发布什么,但我们已经有了相当清晰的思路,下面将介绍主要的可能内容。

文档改进

Rust 2018 版发布目标的一部分是为全套新增和改进功能以及由此产生的习语提供高质量文档。在过去 18 个月中,《Rust 编程语言》一书已完全重写,并将在今年全年随着功能进入稳定版编译器而不断更新。Rust By Example 今年也将进行改造。此外,还有许多第三方书籍,例如《Programming Rust》,也将出版。

语言改进

正在进行的最突出的语言工作源于2017 年的人机工程学倡议。该倡议中几乎所有已接受的 RFC 现在都可以在 nightly 版本中使用,并将在接下来的几个月内得到完善和稳定。这些生产力改进中,有一些“重头戏”将构成该版本的支柱:

  • 所有权系统改进,包括通过“非词法生命周期”使借用更灵活、改进模式匹配集成等等。
  • Trait 系统改进,包括期待已久的 impl Trait 语法,用于抽象地处理类型。
  • 模块系统改进,侧重于提高清晰度和降低复杂性。
  • 生成器/async/await:一流异步编程支持的工作正在快速进展。

此外,我们预计在 Rust 2018 版发布之前,还有一些主要功能会稳定下来,包括 SIMD自定义分配器macros 2.0

编译器改进

Rust 1.24起,增量重编译功能已在稳定版编译器中可用并默认启用。该功能已使重新构建比全新构建显著加快,但在今年全年,我们期望对全新构建重新构建都有持续改进。编译器性能不应成为 Rust 2018 版生产力的障碍。

工具链改进

Rust 2018 版将看到高质量的 1.0 版本发布,包括Rust Language Server(“RLS”,它支撑了我们的许多 IDE 集成工作)和rustfmt(一个用于 Rust 代码的标准格式化工具)。我们将通过稳定自定义注册表、公共依赖项和修订后的配置文件系统来继续改进 Cargo。我们还期望在Cargo 构建系统集成Xargo 集成自定义测试框架方面取得进一步进展,尽管目前尚不清楚在 Rust 2018 版发布之前能完成多少项工作。

库改进

去年的工作基础上,我们将发布 1.0 版的《Rust API 指南》一书,继续推动重要库达到 1.0 状态,通过改造烹饪书(cookbook)来提高可发现性,并在特定领域对库进行大量投入——如下文所述。

网站改进

作为 Rust 2018 版的一部分,我们将彻底改造 Rust 网站,使其对 CTO 和工程师都同样有用。查找信息以帮助评估 Rust 是否适合您的用例,以及及时了解最新的工具和生态系统改进,应该会容易得多。

四个目标领域

Rust 2018 版目标的一部分是在特定使用领域展示 Rust 的生产力。我们选择了以下四个领域在今年进行投入和重点推广:

  • 网络服务。Rust 的可靠性和低资源占用使其成为网络服务和基础设施的绝佳选择,尤其是在高规模下。
  • 命令行应用程序 (CLI)。Rust 的可移植性、可靠性、人机工程学以及生成静态二进制文件的能力相结合,对于编写 CLI 应用程序具有显著效果。
  • WebAssembly。“wasm”网络标准允许将类似原生代码的二进制文件分发到所有主要浏览器,但 GC 支持尚需数年。Rust 在此领域具有极大的优势,并为来自 JS 的程序员提供了一个合理的入门途径。
  • 嵌入式设备。Rust 有潜力使资源受限设备的编程工作变得更具生产力——且更有趣!我们希望嵌入式编程在今年达到一流地位。

这些领域中的每一个都有一个全年的专门工作组 (WG)。这些 WG 将以跨领域的方式运作,与语言、工具、库和文档工作对接。

版本间的兼容性

TL;DR (太长不看):Rust 将继续其稳定性保证,轻松升级到新版本.

版本对编译器有意义。您可以在

edition = "2018"

您的 Cargo.toml 中写入此内容,以选择使用新版本(opt in)用于您的 crate。这样做可能会引入新的关键词或需要对代码进行其他调整。但是,

  • 您可以在编译器上无限期地使用版本;版本是可选加入(opt-in)的
  • 版本是按 crate 设置的,并且可以混合使用;您可以与您的依赖项使用不同版本
  • 在一个版本中无警告的代码,在下一个版本中必须能够编译,并且具有相同的行为。
  • 版本相关的警告,例如某个标识符在下一个版本中将成为关键词,必须可以通过自动化迁移工具 (rustfix) 轻松修复。只有极少数 crate 需要进行任何手动工作来选择使用新版本,并且手动工作量必须是最小的。
  • 大多数新功能与版本无关,即使选择了旧版本,也可以在新编译器上使用。

换句话说,新编译器版本的进展与版本无关;您可以随时迁移,无需担心生态系统兼容性;并且版本迁移通常是微不足道的。

其他 2018 年目标

虽然 Rust 2018 版的发布是今年的主要焦点,但还有一些其他持续关注的问题,我们也想予以重视。

更好地服务中级 Rust 用户

我们从生产环境用户以及2017 年调查中听到的最强烈的信息之一是,人们需要更多资源来帮助他们从理解 Rust 的概念过渡到知道如何有效地使用它们。路线图没有明确规定这些资源具体应该是什么样子——可能有几种类型——但承诺我们社区将在此领域投入大量工作,并在年底提供一些扎实的新材料。

社区

连接并赋能 Rust 的全球社区。我们将把国际化作为一个首要关注点,并积极努力建立目前因语言、地理或文化而分隔的 Rust 子社区之间的联系。我们将在全球范围内发起并支持 Rust 活动,包括进一步发展 RustBridge 项目。

发展 Rust 团队及其中的新领导者。我们将重构 Rust 团队结构,以支持更大的规模、灵活性和领导力成长。我们将系统地投入于指导工作,既通过创建更多入门资源,也通过直接的指导关系。

行动号召

正如 Rust 世界中一贯如此,这里列出的目标最终将是社区共同努力的结果——也许这其中也包括您!这里列出了一些最需要帮助的团队。请注意,所有 IRC 频道都指的是 irc.mozilla.org 网络。

  • WebAssembly 工作组 (WG)。将 Rust 编译到 WebAssembly 应该是 Web 上快速代码的最佳选择。请访问rust-lang-nursery/rust-wasm了解更多并参与进来!
  • CLI 工作组 (WG)。用 Rust 编写 CLI 应用程序应该是一种无障碍体验——从找到合适的库、编写简洁的集成测试到跨平台分发。请加入我们,访问rust-lang-nursery/cli-wg,帮助我们实现这一目标!
  • 嵌入式设备工作组 (WG)。质量、生产力、可访问性:Rust 可以更好地改变嵌入式行业。让我们在 2018 年启动这一进程!请加入我们,访问https://github.com/rust-lang-nursery/embedded-wg
  • 生态系统工作组 (WG)。我们将为整个生态系统中重要的 crate 提供指导和支持。请加入WG-ecosystem 房间,我们将指导您找到需要帮助的地方!
  • 开发工具团队。开发工具(IDE、Cargo、rustdoc、Clippy、Rustfmt、自定义测试框架等)总有很多有趣的事情可以解决。请加入 #rust-dev-tools 并与团队交流!
  • Rustdoc 团队。在您的帮助下,我们可以让所有人的文档变得更好。欢迎加入我们的 IRC 频道 #rustdoc,我们可以帮助您入门!
  • 发布团队。请加入 IRC 频道 #rust-release,参与回归分类和发布流程!
  • 社区团队。我们在社区团队内部启动了几个新团队,并渴望增加新成员:活动、内容、联络、RustBridge、调查和本地化!查看我们的团队仓库或访问我们的 IRC 频道 #rust-community 了解更多并参与进来!