附录 G - Rust 是如何制作的和 “Nightly Rust”

本附录是关于 Rust 是如何制作的,以及它如何影响你作为 Rust 开发 人员。

稳定而不停滞

作为一种语言,Rust 非常关心代码的稳定性。我们希望 Rust 将成为您可以构建的坚如磐石的基础,如果事情是这样 不断变化,那是不可能的。同时,如果我们不能 尝试新功能,我们可能要到之后才能发现重要的缺陷 当我们无法再改变事情时,他们的释放。

我们解决这个问题的方法就是我们所说的“稳定而不停滞”, 我们的指导原则是:您永远不必担心升级到 稳定版 Rust 的新版本。每次升级都应该是无痛的,但也应该 为您带来新功能、更少的错误和更快的编译时间。

咔咔咔!释放频道和乘坐火车

Rust 开发按照火车时间表进行。也就是说,所有开发都是 done 在 Rust 存储库的分支上。版本跟随软件发布 release train 模型,该模型已被 Cisco IOS 和其他软件使用 项目。Rust 有三个发布渠道master

  • 夜间
  • 试用版
  • 稳定

大多数 Rust 开发人员主要使用 stable 通道,但那些想要 试用实验性新功能 可能使用 Nightly 或 Beta 版。

以下是开发和发布过程如何运作的示例:让我们 假设 Rust 团队正在开发 Rust 1.5 的版本。那个版本 发生在 2015 年 12 月,但它将为我们提供现实的版本 数字。Rust 中添加了一项新功能:新的提交登陆到分支上。每天晚上,都会生成一个新的 Rust 夜间版本。每一天都是 发布日,这些版本由我们的发布基础设施创建 自然而然。因此,随着时间的推移,我们的版本如下所示,每晚一次:master

nightly: * - - * - - *

每六周,是时候准备新版本了!的 Rust 存储库从 nightly 使用的分支中分支出来。现在 有两个版本:betamaster

nightly: * - - * - - *
                     |
beta:                *

大多数 Rust 用户并不积极使用 beta 版本,而是在 他们的 CI 系统来帮助 Rust 发现可能的回归。与此同时, 每晚仍然有一个 nightly release:

nightly: * - - * - - * - - * - - *
                     |
beta:                *

假设找到一个回归。幸好我们有一些时间来测试测试版 release 偷偷溜进 stable 版本!已应用修复 到 ,以便修复 nightly,然后将修复程序向后移植到分支,并生成新的 beta 版本:masterbeta

nightly: * - - * - - * - - * - - * - - *
                     |
beta:                * - - - - - - - - *

在第一个 beta 版创建六周后,是时候发布稳定版了!该分支是从以下分支生成的:stablebeta

nightly: * - - * - - * - - * - - * - - * - * - *
                     |
beta:                * - - - - - - - - *
                                       |
stable:                                *

万岁!Rust 1.5 完成了!然而,我们忘记了一件事:因为 几周过去了,我们还需要 Rust 下一个版本 1.6 的新测试版。 所以在 branches off 之后,下一个版本的 branches off of again:stablebetabetanightly

nightly: * - - * - - * - - * - - * - - * - * - *
                     |                         |
beta:                * - - - - - - - - *       *
                                       |
stable:                                *

这被称为“训练模型”,因为每六周,一个版本“离开 station“,但在此之前仍需通过 beta 频道 作为稳定版本发布。

Rust 每六周发布一次,就像发条一样。如果您知道一个 Rust 的日期 发布,你可以知道下一次的日期:现在是六周后。一个不错的 每六周安排一次发布的方面是下一班火车是 即将推出。如果某个功能碰巧错过了某个特定版本,则无需 担心:短时间内又要发生另一场了!这有助于减轻压力 在接近发布截止日期之前偷偷使用可能未经完善的功能。

多亏了这个过程,你可以随时查看 Rust 的下一个版本和 亲自验证它是否易于升级到:如果 beta 版本没有 按预期工作,您可以向团队报告并在 下一个稳定版本发布!测试版中的损坏相对较少,但仍然是一个软件,并且确实存在错误。rustc

维护时间

Rust 项目支持最新的稳定版本。当新的稳定 版本发布后,旧版本将达到其生命周期结束 (EOL)。这意味着 每个版本均受支持六周。

不稳定的特性

此发布模型还有一个问题:不稳定的功能。Rust 使用 称为“功能标志”的技术来确定在 给定的发布。如果新功能正在积极开发中,它会登陆 ,因此,在 nightly 上,但在功能标志后面。如果您作为 用户,希望尝试 work-in-progress 功能,您可以尝试,但您必须尝试 使用 Rust 的 nightly 版本,并使用 适当的标志来选择加入。master

如果您使用的是 Rust 的 beta 版或稳定版,则不能使用任何功能 标志。这是使我们能够实际使用新功能的关键 在我们宣布它们永远稳定之前。那些希望选择放血的人 Edge 可以做到这一点,那些想要坚如磐石的体验的人可以坚持使用 稳定,并且知道他们的代码不会中断。稳定而不停滞。

本书仅包含有关正在进行中的稳定功能的信息 功能仍在变化,并且它们肯定会有所不同 book 的作者,以及它们在稳定版本中启用的时间。您可以找到 仅限 nightly-features online 的文档。

Rustup 和 Rust Nightly 的角色

Rustup 可以轻松地在 Rust 的不同发布频道之间切换,在 全局或每个项目。默认情况下,您将安装稳定的 Rust。自 安装 nightly,例如:

$ rustup toolchain install nightly

你可以看到所有工具链(Rust 和关联的 组件)。下面是一个 作者的 Windows 计算机中:rustup

> rustup toolchain list
stable-x86_64-pc-windows-msvc (default)
beta-x86_64-pc-windows-msvc
nightly-x86_64-pc-windows-msvc

如您所见,稳定的工具链是默认的。大多数 Rust 用户使用 stable 大多数时候。您可能希望大多数时候使用 stable,但请使用 nightly 在特定项目上,因为您关心尖端功能。 为此,您可以在该项目的目录中使用 nightly 工具链作为您在该目录中时应该使用的工具链:rustup overriderustup

$ cd ~/projects/needs-nightly
$ rustup override set nightly

现在,每次你调用 ~/projects/needs-nightly 或在 ~/projects/needs-nightly 里面时,都会确保你使用的是 nightly Rust,而不是你默认的稳定 Rust。当您 有很多 Rust 项目!rustccargorustup

RFC 流程和团队

那么,您如何了解这些新功能呢?Rust 的开发模式遵循 请求注释 (RFC) 流程。如果您想改进 Rust, 您可以编写一个提案,称为 RFC。

任何人都可以编写 RFC 来改进 Rust,并且提案会被审查并 由 Rust 团队讨论,该团队由许多主题子团队组成。有 Rust 的 网站,其中包括 项目的每个领域:语言设计、编译器实现、 基础设施、文档等。相应的团队会读取 提案和评论,写一些自己的评论,最终, 接受或拒绝该功能是有共识的。

如果该功能被接受,则会在 Rust 存储库中打开一个 issue,并且 有人可以实施它。实施得很好的人,可能不是 首先提出该功能的人!当 implementation 为 ready,它就会落在特性门控后面的分支上,正如我们所讨论的 在 “Unstable Features” 部分。master

一段时间后,一旦使用 nightly 版本的Rust开发人员能够 要试用新功能,团队成员将讨论该功能及其内容 每晚制定,并决定是否应该进入稳定的 Rust。 如果决定向前推进,则删除特性门控,并且 功能现在被视为稳定版!它让火车进入一个新的稳定版本 的 Rust。

本文档由官方文档翻译而来,如有差异请以官方英文文档(https://doc.rust-lang.org/)为准