ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

《The Rust Programming Language》第 2 版前言导读:Rust 2021 Edition、版本兼容性与本书新特性

2026/10/4 14:24:58 拓冰建站 浏览量
《The Rust Programming Language》第 2 版前言导读:Rust 2021 Edition、版本兼容性与本书新特性 教程文档【免费下载链接】bookThe Rust Programming Language项目地址https://gitcode.com/gh_mirrors/bo/book点击查看免费下载前言导读这篇指南围绕 The Rust Programming Language即《The Rust Programming Language》书籍本仓库为 rust-lang/book 的开源镜像的 Preface 展开系统讲解本书在 Rust 2021 Edition 与 Rust 1.62.0 基线之上的撰写前提、2021 版语言改进对全书内容的具体影响、以及本书相较前版的重要修订点。读完本文你将掌握如何识别项目中的 Edition 配置、理解 Rust 向后兼容保证的实际含义并知道本书各章节尤其第 7 章模块组织与第 13 章闭包在内容上的关键升级在哪里。一、前言说了什么一份写给读者的“版本基线声明”nostarch/preface.md是本书的 Preface篇幅虽短信息密度却很高。它首先给出了一条硬性前提本书文本假定你使用的 Rust 版本为1.62.0发布于 2022-06-30或更高并且所有项目都在Cargo.toml中设置edition 2021以便使用 Rust 2021 Edition 的惯用写法。这句话在仓库里可以被多处印证书籍正文的安装章节 src/ch01-01-installation.md 明确说明本书示例在“任何更新的稳定版本”上都应能正常编译因为 Rust 的稳定性保证保证了“书中能编译的示例在更新的 Rust 版本下依然能编译”。仓库根目录的 rust-toolchain 文件将工具链固定为1.97说明当前代码库已经用远高于 1.62.0 的版本验证过。全书所有示例清单listings的Cargo.toml均已使用更新的 Edition 配置例如 listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml 中即为edition 2024。这说明仓库已随版本演进持续同步升级而 Preface 所描述的是该书面向读者时的撰写基线。前言还指向了书中两处延伸阅读“Installation”安装说明与Appendix EEdition 说明。在本书中分别对应安装/更新 Rustsrc/ch01-01-installation.mdEdition 详解src/appendix-05-editions.md二、Rust 2021 Edition 是什么语言层面的改进与一致性修正Preface 指出2021 Edition 包含了一系列让 Rust 更符合人体工程学ergonomic的改进并修正了一些不一致之处。要真正理解这句话需要结合 Appendix E 的内容Rust 编译器采用约六周的发布周期功能以小步快跑的方式持续累积而“Edition”版本代每三年左右推出一次把这些增量变化打包成一个清晰的整体并配以完整更新的文档与工具链。截至本书写作时已有四个 Edition 可用Rust 2015、Rust 2018、Rust 2021 与 Rust 2024Preface 面向的是 Rust 2021。edition键在Cargo.toml中指示编译器以哪种 Edition 语义解析你的代码[package] name my_project version 0.1.0 edition 2021关键事实均来自 src/appendix-05-editions.md若edition键缺失Rust 出于向后兼容考虑默认使用2015。Edition 可以包含不兼容的变化例如引入新关键字可能与已有标识符冲突但除非你显式选择新的 Edition否则即使升级编译器版本代码也继续编译。所有编译器版本都支持其发布之前存在的任何 Edition并且可以混合链接不同 Edition 的 crate你的项目用 2018、依赖用 2015或反之都能编译。Edition 的变化只影响编译器最初解析代码的方式绝大多数特性在所有 Edition 上可用只有少数主要是新增关键字类特性仅在较新 Edition 可用。Preface 特别强调“任何来自本书早期版本的、曾经能编译的代码只要项目Cargo.toml中声明了对应的 Edition即使你升级了 Rust 编译器版本也依然能编译”——这正是 Rust 向后兼容保证的体现。三、本书相较前版的改进清单Preface 列出了这版书针对读者反馈所做的具体改进共三条逐一展开如下。3.1 第 7 章新增“模块快速参考”第 7 章新增了一个**模块快速参考quick reference**小节讲解如何用模块把代码组织到多个文件中。正文对应 src/ch07-02-defining-modules-to-control-scope-and-privacy.md 开头的 “Modules Cheat Sheet”核心规则包括从 crate 根开始编译 crate 时编译器首先在 crate 根文件库 crate 通常是src/lib.rs二进制 crate 通常是src/main.rs中查找代码。声明模块在 crate 根用mod garden;声明模块后编译器按顺序在以下位置查找模块代码内联紧随mod garden的花括号内文件src/garden.rs文件src/garden/mod.rs。声明子模块在非 crate 根文件里可声明子模块如mod vegetables;编译器会按父模块目录名查找src/garden/vegetables.rs或src/garden/vegetables/mod.rs。路径模块一旦成为 crate 的一部分只要隐私规则允许就能通过路径从 crate 内任意位置引用如crate::garden::vegetables::Asparagus。私有与公有模块内的代码默认对其父模块私有用pub mod公开模块用pub公开模块内的条目。use关键字在作用域内用use crate::garden::vegetables::Asparagus;创建快捷方式之后只需写Asparagus即可。仓库中的完整可运行示例位于 listings/ch07-managing-growing-projects/quick-reference-example其中包含src/main.rs、src/garden.rs与src/garden/vegetables.rs与正文逐行对应可直接作为模块组织的实战模板。3.2 第 13 章新的闭包示例第 13 章引入了更新、更清晰的闭包示例重点阐明三件事捕获captures、move关键字与Fn系列 trait。正文位于 src/ch13-01-closures.md其要点如下闭包可以捕获环境与函数不同闭包能捕获定义它的作用域中的值。书中用“T 恤公司促销”例子演示giveaway方法对OptionShirtColor调用unwrap_or_else传入闭包|| self.most_stocked()。该闭包捕获了对self的不可变引用并在None时才被求值。注意标准库无需知道Inventory或ShirtColor的任何细节——这正是闭包捕获环境的价值。闭包自动实现一个或多个Fntrait按“加法”方式叠加取决于闭包体如何处理捕获值FnOnce只能调用一次的闭包。所有闭包至少实现该 trait若闭包把捕获值移出闭包体则只实现FnOnce。FnMut不移出捕获值、但可能修改捕获值的闭包可多次调用。Fn既不移出也不修改捕获值的闭包以及什么都不捕获的闭包可多次调用且不修改环境。以OptionT的unwrap_or_else为例正文中的标准库签名implT OptionT { pub fn unwrap_or_elseF(self, f: F) - T where F: FnOnce() - T { match self { Some(x) x, None f(), } } }其 trait bound 用FnOnce因为f至多被调用一次从而能接受全部三种闭包灵活性最大化。而切片上的sort_by_key用FnMut因为它会对每个元素调用一次闭包。书中 Listing 13-8 展示了一个只实现FnOnce的闭包把value移入sort_operations向量无法用于sort_by_key编译器会报错——这个对照示例把 trait 选择背后的“调用次数”逻辑讲得非常透彻。move关键字当闭包需要把捕获值“移入”闭包而非借用时使用move。Preface 明确把“更清晰地阐明move关键字”列为本章改进点之一。注意本书当前源码版本中第 13 章正文已随 Edition 升级同步演进Preface 所述为该章节在 Rust 2021 基线下的改进版本无论哪个 Edition闭包捕获、move与Fntrait 的语义都保持一致示例本身在各 Edition 下均可编译运行。3.3 全文勘误与措辞修正Preface 最后提到本书修正了全文若干小错误和不精确的措辞并感谢了反馈这些问题的读者。这是文档维护层面的常规修订无技术性内容但体现了本书与社区反馈保持同步的维护方式。四、对读者的实操建议结合 Preface 与 src/appendix-05-editions.md可以给出以下可落地的检查清单确认 Rust 工具链版本运行rustc --version确保不低于 1.62.0当前仓库 rust-toolchain 已固定为 1.97可作为参考基线。更低的版本可能无法完整体现书中示例行为。确认项目 Edition检查项目Cargo.toml中的edition字段。若想完整跟随本书 Rust 2021 的写法设置为edition 2021若希望与当前仓库最新清单一致可参考 listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml 等文件使用更新的 Edition 值。利用向后兼容保证旧项目只要声明了对应 Edition升级 Rust 编译器版本后依然能编译混合不同 Edition 的依赖也完全可行。这一保证正是 Preface 反复强调的“Rust 向后兼容保证”的实践含义。优先阅读改进章节第 7 章模块快速参考src/ch07-02-defining-modules-to-control-scope-and-privacy.md与第 13 章闭包src/ch13-01-closures.md是本书针对读者反馈重点打磨的部分适合优先精读。五、总结Preface 虽然只有短短几段却承担了三个关键职责声明本书的版本基线Rust ≥ 1.62.0 Edition 2021、说明 2021 Edition 的语言改进动机、列出本书相对前版的修订重点第 7 章快速参考、第 13 章闭包示例、全文勘误。它同时连接着仓库中两个重要的延伸文档src/ch01-01-installation.md安装与更新 Rust与 src/appendix-05-editions.mdEdition 机制详解。理解这份前言等于理解了整本书在“哪个 Rust 版本、哪个 Edition 语义”下写作以及读者应当如何配置自己的环境来获得一致的阅读与运行体验。赞分享教程文档【免费下载链接】bookThe Rust Programming Language项目地址https://gitcode.com/gh_mirrors/bo/book点击查看免费下载相关推荐TandoorRecipes 外部连接器Connectors实战将购物清单双向同步到 HomeAssistantTandoorRecipes 外部连接器Connectors实战将购物清单双向同步到 HomeAssistant Connectors外部连接器是 T教程文档《The Rust Programming Language》旧版跳转页解读const 与 static 的权威定义与全书导航《The Rust Programming Language》旧版跳转页解读const 与 static 的权威定义与全书导航 本文基于当前仓库 redire教程文档Rust 高级特性完全指南Unsafe、高级 Trait、类型系统与宏The Rust Programming Language 第 20 章深度解析Rust 高级特性完全指南Unsafe、高级 Trait、类型系统与宏The Rust Programming Language 第 20 章深度解析 本教程文档上一篇PilotGo-plugin-mysql开发者指南插件扩展与API接口调用实例下一篇rpmdepsearch安全指南确保依赖查询过程的安全性与隐私保护创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考