# 附录 E - 版本

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

Rust 语言和编译器有一个六周的发布周期,这意味着用户会获得源源不断的新功能。其他编程语言不太频繁地发布更大的更改;Rust 更频繁地发布较小的更新。过一段时间,所有这些微小的更改会累积起来。但是从一个发布到另一个发布,很难回顾并说,"哇,在 Rust 1.10 和 Rust 1.31 之间,Rust 改变了很多!"

大约每三年,Rust 团队会制作一个新的 Rust 版本edition)。每个版本将已经落地的功能整合到一个清晰的包中,配有完全更新的文档和工具。新版本作为常规六周发布流程的一部分发布。

版本为不同的人服务不同的目的:

  • 对于活跃的 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 版本的开发者将在新的稳定版本发布时继续看到改进。但是,在某些情况下,主要是当添加新关键字时,一些新功能可能只在后续版本中可用。如果你想利用这些功能,你需要切换版本。

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