附录 E - 版本

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

Rust 语言和编译器有六周的发布周期,这意味着用户会不断获得新的特性。其他编程语言较少发布较大的变更;Rust 则更频繁地发布较小的更新。一段时间后,所有这些微小的变化积累起来。但是从一个版本到另一个版本,很难回顾说:“哇,Rust 从 1.10 到 1.31 版本,变化真大啊!”

大约每三年,Rust 团队会推出一个新的 Rust 版本。每个版本将已经实现的功能整合到一个清晰的整体中,并配有完全更新的文档和工具。新版本会作为常规六周发布过程的一部分发布。

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

  • 对于活跃的 Rust 用户,新版本将渐进的变化整合到一个易于理解的整体中。
  • 对于非用户,新版本标志着一些重大的进展已经实现,这可能会让 Rust 值得再次关注。
  • 对于 Rust 的开发者,新版本为整个项目提供了一个凝聚点。

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

Cargo.toml 文件中的 edition 键指示编译器应使用哪个版本来编译你的代码。如果该键不存在,Rust 会出于向下兼容的原因使用 2015 作为版本值。

每个项目都可以选择加入 2015 默认版本以外的其他版本。版本可以包含不兼容的变更,例如包含一个与代码中标识符冲突的新关键字。然而,除非你选择加入这些变更,否则即使你升级了所使用的 Rust 编译器版本,你的代码仍然会继续编译通过。

所有 Rust 编译器版本都支持在该编译器发布之前存在的任何版本,并且它们可以将任何支持的版本中的 crate 链接在一起。版本变更仅影响编译器最初解析代码的方式。因此,如果你使用 Rust 2015,而你的一个依赖项使用 Rust 2018,你的项目将能编译并使用该依赖项。你的项目使用 Rust 2018 而依赖项使用 Rust 2015 的相反情况,也同样适用。

需要明确的是:大多数特性在所有版本上都可用。使用任何 Rust 版本的开发者都将随着新的稳定版本的发布而持续看到改进。然而,在某些情况下,主要是在添加新关键字时,一些新特性可能仅在后续版本中可用。如果你想利用这些特性,你需要切换版本。

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