You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
## 附录 E: 版本
<!-- https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md -->
<!-- commit 56ec353290429e6547109e88afea4de027b0f1a9 -->
早在第一章,我们见过 `cargo new` 在 *Cargo.toml* 中增加了一些有关 `edition` 的元数据。本附录将解释其意义!
Rust 语言和编译器有一个为期六周的发布循环, 这意味着用户会稳定得到新功能的更新。其他编程语言发布大更新但不甚频繁; Rust 选择更为频繁的发布小更新。一段时间之后,所有这些小更新会日积月累。不过随着小更新逐次的发布,或许很难回过头来感叹:“哇,从 Rust 1.10 到 Rust 1.31, Rust 的变化真大!”
大约每两到三年, Rust 团队会生成一个新的 Rust ** 版本**( *edition*)。每一个版本会结合已经落地的功能,并提供一个清晰的带有完整更新文档和工具的功能包。新版本会作为常规的六周发布过程的一部分发布。
新的版本对不同人群具有不同意义:
- 对于活跃的 Rust 用户,新版本将这些增量改进整合成一个易于理解的包。
- 对于非 Rust 用户,它表明发布了一些重大进展,这意味着 Rust 可能变得值得一试。
- 对于 Rust 自身开发者,它提供了项目整体的集合点。
在本文档编写时, Rust 有四个可用版本: Rust 2015、Rust 2018、Rust 2021 和 Rust 2024。本书基于 Rust 2021 edition 惯用法编写。
*Cargo.toml* 中的 `edition` 字段表明代码应该使用哪个版本编译。如果该字段不存在,其默认为 `2015` 以提供后向兼容性。
每个项目都可以选择不同于默认的 2015 edition 的版本。这样,版本可能会包含不兼容的修改,比如新增关键字可能会与代码中的标识符冲突并导致错误。不过除非选择兼容这些修改,(旧)代码仍将能够编译,即便升级了 Rust 编译器的版本。
所有 Rust 编译器都支持任何之前存在的编译器版本,并可以链接任何支持版本的 crate。编译器修改只影响最初的解析代码的过程。因此, 如果你使用 Rust 2015 而某个依赖使用 Rust 2018, 你的项目仍旧能够编译并使用该依赖。反之, 若项目使用 Rust 2018 而依赖使用 Rust 2015 亦可工作。
有一点需要明确:大部分功能在所有版本中都能使用。开发者使用任何 Rust 版本将能继续接收最新稳定版的改进。然而在一些情况,主要是增加了新关键字的时候,则可能出现了只能用于新版本的功能。只需切换版本即可利用新版本的功能。
请查看 [_Edition Guide_ ](https://rust-lang-nursery.github.io/edition-guide/ ) 了解更多细节,这是一个全面介绍不同版本之间差异的书籍,包括如何通过 `cargo fix` 自动将代码迁移到新版本。