附录 E - 版本

在第一章中,您看到了 cargo new 会在您的 Cargo.toml 文件中添加一些关于版本的元数据。本附录将讨论这意味着什么!

Rust 语言和编译器采用六周发布周期,这意味着用户可以持续获得新功能。其他编程语言发布重大更新的频率较低;Rust 则更频繁地发布较小的更新。一段时间后,所有这些微小的变化都会累积起来。但是,从一个版本到另一个版本,可能很难回顾并说:“哇,从 Rust 1.10 到 Rust 1.31,Rust 发生了很大的变化!”

每隔两三年,Rust 团队就会发布一个新的 Rust 版本。每个版本都将已发布的功能整合到一个清晰的软件包中,并提供完整的更新文档和工具。新版本作为通常的六周发布流程的一部分发布。

版本对不同的人有不同的用途

  • 对于活跃的 Rust 用户来说,新版本将增量更改整合到一个易于理解的软件包中。
  • 对于非用户来说,新版本标志着一些重大进步已经实现,这可能使 Rust 值得再次关注。
  • 对于那些开发 Rust 的人来说,新版本为整个项目提供了一个集结点。

在撰写本文时,Rust 有三个版本可用:Rust 2015、Rust 2018 和 Rust 2021。本书使用 Rust 2021 版本的语法编写。

Cargo.toml 中的 edition 键指示编译器应该为您的代码使用哪个版本。如果该键不存在,Rust 将使用 2015 作为版本值,以实现向后兼容性。

每个项目都可以选择使用默认的 2015 版本以外的版本。版本可能包含不兼容的更改,例如包含与代码中标识符冲突的新关键字。但是,除非您选择使用这些更改,否则即使您升级了使用的 Rust 编译器版本,您的代码也将继续编译。

所有 Rust 编译器版本都支持该编译器版本发布之前存在的任何版本,并且它们可以将任何受支持版本的箱链接在一起。版本更改仅影响编译器最初解析代码的方式。因此,如果您使用的是 Rust 2015,而您的某个依赖项使用的是 Rust 2018,则您的项目将可以编译并使用该依赖项。反之亦然,如果您的项目使用 Rust 2018,而某个依赖项使用 Rust 2015,则同样可以正常工作。

需要明确的是:大多数功能将在所有版本中都可用。随着新稳定版本的发布,使用任何 Rust 版本的开发人员都将继续看到改进。但是,在某些情况下,主要是在添加新关键字时,某些新功能可能仅在更高版本中可用。如果您想利用这些功能,则需要切换版本。

有关更多详细信息,版本指南 是一本关于版本的完整书籍,其中列举了版本之间的差异,并解释了如何通过 cargo fix 自动将代码升级到新版本。