mirror of
https://github.com/KaiserY/trpl-zh-cn
synced 2024-11-14 04:41:49 +08:00
30 lines
2.8 KiB
Markdown
30 lines
2.8 KiB
Markdown
## 附录 E:版本
|
||
|
||
> [appendix-05-editions.md](https://github.com/rust-lang/book/blob/main/src/appendix-05-editions.md)
|
||
> <br />
|
||
> commit 8cf0496bb8e56b683ea3f015871c8631684decf4
|
||
|
||
早在第一章,我们见过 `cargo new` 在 *Cargo.toml* 中增加了一些有关 `edition` 的元数据。本附录将解释其意义!
|
||
|
||
Rust 语言和编译器有一个为期 6 周的发布循环。这意味着用户会稳定得到新功能的更新。其他编程语言发布大更新但不甚频繁;Rust 选择更为频繁的发布小更新。一段时间之后,所有这些小更新会日积月累。不过随着小更新逐次的发布,或许很难回过头来感叹:“哇,从 Rust 1.10 到 Rust 1.31,Rust 的变化真大!”
|
||
|
||
每两到三年,Rust 团队会生成一个新的 Rust **版本**(*edition*)。每一个版本会结合已经落地的功能,并提供一个清晰的带有完整更新文档和工具的功能包。新版本会作为常规的 6 周发布过程的一部分发布。
|
||
|
||
这为不同的人群提供了不同的功能:
|
||
|
||
- 对于活跃的 Rust 用户,其将增量的修改与易于理解的功能包相结合。
|
||
- 对于非用户,它表明发布了一些重大进展,这意味着 Rust 可能变得值得一试。
|
||
- 对于 Rust 自身开发者,其提供了项目整体的集合点。
|
||
|
||
在本文档编写时,Rust 有三个可用版本:Rust 2015、Rust 2018 和 Rust 2021。本书基于 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` 自动将代码迁移到新版本。
|