在第一章中,你会看到 cargo new 会在 Cargo.toml 档案中加上一些关于版号(edition)的诠释资料。此附录会讲解其意义!

Rust 语言与编译器有一个为其六周的发布循环,这意味着使用者可能定期获得一些新功能。其他程式设计语言可能会发布较大的更新但就会比较不频繁。Rust 倾向于较频繁地发布小更新。过一段时间后,这些所有变更会渐渐累积起来。不过随着一次次的发布,回过头来看可能会发觉“哇!Rust 1.10 与 Rust 1.31 之间的变化真大!”

所以每个两到三年,Rust 团队会产生新的 Rust 版号(edition)。每个版本会整合已推出的功能成一整个附有完整技术文件更新与工具的套件。然后新的版号就会包含在每六周循环过程的发布之中。

版号对不同客群提供不同功能:

对于活跃的 Rust 使用者来说,新的版号将累积的变更整合成容易理解的单一套件。

对非使用者来说,新的版号意味着有一些新的重大进展,让 Rust 可能值得再看一次。

对于开发 Rust 的人来说,新的版号提供整个专案的一个集结点。

在本书撰写时,Rust 已经有三个版号:Rust 2015、Rust 2018 与 Rust 2021。Cargo.toml 中的 edition 指的是编译器该对你的程式码使用何种版号。如果没有指定的话,Rust 会以向下相容作为考量而是使用 2015。

每个专案都能选择一种版号而不只是使用预设的 2015 版号。版号会包含无法相容的变更,像是包含新的关键字使得程式码中的标识符冲突。然而,除非你亲自改变版号,不然就算你更新 Rust 编译器的版本,你的程式码依然能够编译通过。

所有的 Rust 编译器版本会支援在其编译器发布之前的任何版号,而且可以连结任何支援版号的 crate。版号变更只会影响编译器初始解析程式码的方式而已。因此,如果你使用 Rust 2015 但你其中一个依赖使用 Rust 2018 的话,你的专案仍然能编译并使用该依赖函式库。相对地,当你的专案使用 Rust 2018 而有依赖使用 Rust 2015 的话依然是如此。

这里要澄清一点:大多数功能在所有版号中都能使用。开发者使用任何 Rust 版号都能继续获得新的稳定版本带来的改善。然而有些情况下,主要是增加新的关键字的时候,有一些新功能可能就只有后期的版号才能使用。你想使用利用新功能的话,就得切换版号。

想了解更多资讯的话,请查阅 Edition Guide,这是本涵盖所有版号之间不同的书籍,并会解释如何使用 cargo fix 来自动升级你的程式码至新的版号。