附录 E:版本
在第 1 章中,你看到 cargo new 会在 Cargo.toml 文件中添加一些关于版本(edition)的元数据。本附录将解释这意味着什么!
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 版本的开发者都会随着新的稳定版本发布而持续看到改进。然而,在某些情况下,主要是当新关键字被添加时,一些新功能可能只在较新的版本中可用。如果你想利用这些功能,就需要切换版本。
更多详情请参阅 Rust 版本指南。这是一本完整的书,列举了各版本之间的差异,并解释了如何通过 cargo fix 自动将代码升级到新版本。