附录 E:关于版本

Appendix E - Editions

在第一章中,咱们曾看到 cargo new 会把一点有关某个版的元数据,添加到咱们的 Cargo.toml 文件。此附录就会讲到那意味着什么!

Rust 语言及编译器有着六周的发布周期,意味着用户会得到源源不断的新功能。其他编程语言会不经常地发布较大变更;Rust 则会更频繁发布较小的更新。不久之后,全部这些小修改就会堆积起来。不过这一个个发布中,回头看看而讲到,“噢,从版本 1.10 到 1.31,Rust 改变了很多!”。则是不容易的。

每两三年,Rust 团队都会产生一个新的 Rust 版本,edition。每个版本都会以完全更新的文档与工具,将那些业已落地到一个明确包中的特性放到一起。新版本会作为寻常的六周发布过程而交付。

这些版本服务了不同人群的不同目的:

  • 对于活跃的 Rust 用户,新版本会把那些增量变更,一起放入到一个易于掌握的包中;
  • 对于那些非用户,新版本释放了一些已落地的大进展信号,这会让 Rust 或许值得再看一看;
  • 对于开发 Rust 的人们,新版本会提供这个项目作为整体的集结点。

在本书编写时,已有三个 Rust 版本可用:Rust 2015、Rust 2018 与 Rust 2021。本书是用 Rust 2021 版本的习惯用语编写的。

Cargo.toml 中的 edition 键,表示应对咱们的代码使用哪个版本的编译器。若该键不存在,Rust 就会以向后兼容原因,而使用 2015 作为版本值。

每个项目都可以选择一个不同于默认 2015 的版本。这些版本可能包含了不兼容的变更,比如包含了与代码中标识符冲突的新关键字。但是,除非咱们选到这些变更,那么即使咱们更新了所使用的 Rust 编译器,咱们的代码将继续编译。

全部 Rust 编译器版本,都会支持先于那个编译器发布而存在的任何版本,且他们可将任何受支持版本的代码箱连接起来。版本变更只会影响编译器于编译初期解析代码的方式。因此,当咱们正使用着 Rust 2015,而咱们的一项依赖使用了 Rust 2018 时,咱们的项目将编译,并能够使用那项依赖。与之相反,在咱们的项目使用 Rust 2018,而一项依赖使用了 Rust 2015 的情形下,也会工作。

要明确的是:绝大多数特性,在所有版本上都将可用。使用任何 Rust 版本的开发者,都将在新的稳定发布构造出来时,发现一些改进。但是,在一些情况下,主要是在新曾了关键字时,一些新特性就会只在稍后版本中可用了。若咱们打算利用上这些新特性,咱们将需要切换版本。

有关更多细节,版本指南,Edition Guide 是本列举了不同版本间差异,并解释了怎样通过 cargo fix,而自动将咱们的代码更新到新版的一本完整的书。

Last change: 2023-12-01, commit: aa11f3e