附录 E:Rust 版本
在第 1 章中,你看到 cargo new 会在 Cargo.toml 文件中添加一些关于版本的信息。本附录将介绍这意味着什么。
Rust 语言和编译器每六周发布一次,因此用户会持续获得新功能。其他编程语言较少发布较大的改动;Rust 则更频繁地发布较小的更新。随着时间推移,这些小改动会逐渐累积。不过,从一个版本回顾到另一个版本时,人们可能很难意识到变化有多大,比如:“哇,Rust 从 1.10 到 1.31 已经改变了这么多!”
Rust 团队大约每三年发布一个新的 Rust 版本(edition)。每个版本都会将已经推出的功能整合为一个清晰的整体,并配套更新完整的文档和工具。新版本仍按照常规的六周发布周期推出。
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 版本,开发者都会随着新的稳定版发布而获得改进。不过,在某些情况下,主要是新增关键字时,部分新功能可能只在较新的版本中可用。若要使用这些功能,你需要切换到相应版本。
更多详情请参阅Rust 版本指南。这是一本完整的指南,列出了各版本之间的差异,并说明如何通过 cargo fix 自动将代码升级到新版本。