)
教程文档【免费下载链接】bookThe Rust Programming Language项目地址https://gitcode.com/gh_mirrors/bo/book点击查看免费下载本篇技术指南以《The Rust Programming Language》TRPL官方仓库中的「附录 A关键字Keywords」为核心骨架系统梳理 Rust 当前使用中的全部关键字、为未来预留的关键字以及突破命名限制的原始标识符raw identifiers语法。文中所有结论均以仓库源文档 src/appendix-01-keywords.md及 nostarch 排版版 nostarch/appendix_a.md为基准并结合书内各章节源码级讲解交叉印证。读完本文你将能够快速查证任意标识符是否可安全命名、理解每个关键字的职责边界并掌握用r#前缀合法使用关键字尤其是跨 edition 集成遗留库的完整实战方案。附录 A 在书中的定位与标识符概念附录 A 位于书籍正文之后与附录 B运算符与符号见 src/appendix-02-operators.md、附录 Eeditions见 src/appendix-05-editions.md共同构成全书语法的查证体系。该附录的仓库源文件为src/appendix-01-keywords.mdnostarch 目录下的nostarch/appendix_a.md由其自动生成文件头部注释明确说明「此文件由 /src/ 目录内容周期性生成所有修订需在 /src/ 中完成」——这也解释了为什么两份文件正文完全一致。正文开篇即给出关键定义Rust 语言为当前或未来使用保留了以下关键字。正因如此它们不能用作标识符除非使用原始标识符。标识符是函数、变量、参数、结构体字段、模块、crate、常量、宏、静态值、属性、类型、trait 或生命周期的名称。这意味着无论是定义一个函数、一个变量、一个 struct 字段还是一个 crate 名只要与关键字撞名编译器都会拒绝。理解这份清单是编写可编译代码、排查命名冲突错误的前提。当前使用中的关键字共 39 个以下列表完整收录附录 A 中「当前使用中」的全部 39 个关键字依据 src/appendix-01-keywords.md 逐条统计每项保留附录原始功能描述并按使用场景归类方便速查。控制流与分支break立即退出循环。continue跳到循环的下一次迭代。elseif与if let控制流结构的兜底分支。if根据条件表达式的结果分支。infor循环语法的一部分。loop无条件循环。match将值与模式进行匹配书中 ch06-02-match.md 有完整专题。return从函数返回。while基于表达式结果条件循环。for遍历迭代器中的项、实现 trait或指定高阶生命周期higher ranked lifetime。类型、项定义与代码组织const定义常量项或常量裸指针。enum定义枚举。extern链接外部函数或变量FFI。fn定义函数或表示函数指针类型。impl实现固有inherent功能或 trait 功能。let绑定变量。mod定义模块。static全局变量或持续整个程序执行期间的生命周期。struct定义结构体。trait定义 trait。type定义类型别名或关联类型。union定义联合体仅在 union 声明中使用时才作为关键字即union关键字只有在声明 union 时生效其他语境下并非关键字。作用域、路径与可见性crate在模块路径中指代 crate 根。self方法主体或当前模块。Self所定义或所实现类型的类型别名注意大小写敏感Self与self是两个不同的关键字。super当前模块的父模块。pub标记结构体字段、impl块或模块中的公共可见性。use将符号引入当前作用域。as执行基本类型转换primitive casting、消除包含某条目的具体 trait 的歧义或在use语句中重命名条目。所有权、借用与闭包move使闭包获得其所有捕获的所有权。mut标记引用、裸指针或模式绑定中的可变性。ref按引用绑定。异步编程async返回一个Future而不是阻塞当前线程。await挂起执行直到某个Future的结果就绪。布尔字面量与其余关键字false布尔假字面量。true布尔真字面量。dyn对 trait 对象的动态分发。unsafe标记不安全代码、函数、trait 或实现。where标记约束类型的子句。关键字语义深入从附录到正文的交叉印证附录 A 只给出每个关键字的一句话功能描述真正的实战语义分布在书籍各章。以下选取几组高频关键字结合仓库内对应章节展开说明帮助你理解「为何这些词被保留」。async 与 await异步编程的两个支柱async与await是附录在 2018 版Rust 2018 edition新增的关键字。src/ch17-01-futures-and-syntax.md 指出async fn实际上会被编译器改写为「返回Future的普通函数函数体是一个 async 块」async 块是惰性的Rust 会避免在真正需要前执行异步代码。await关键字只能出现在 async 函数或 async 块内部因为异步代码需要运行时runtime驱动async fn page_title(url: str) - OptionString { let text trpl::get(url).await.text().await; text.html().find_first(title).map(|title| title.inner_html()) }书中还演示了async move块的用法并明确说明main不能标记为async——异步代码需要 runtime如 Tokio、trpl::block_on才能执行。这正是async/await被保留、且main只能作为普通函数入口的原因。use、as 与 pub use作用域导入的完整工具箱use将符号引入作用域as提供重命名能力pub use则实现「再导出re-export」。本章节在 src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md 中有完整教学use std::collections::HashMap; // 直接导入项 use std::io::Result as IoResult; // as 别名解决同名冲突 pub use crate::front_of_house::hosting; // 再导出让外部调用方用更短路径要点包括use只在声明处所在作用域内生效换一个作用域需要重新引入引入函数时惯例是导入其父模块而引入 struct、enum 等项时惯例是导入完整路径同名类型冲突时可用as起别名或用std::fmt::Result/std::io::Result的父模块路径区分嵌套路径use std::{io, io::Write}与 glob 运算符use std::collections::*;可精简导入列表。这些能力共同决定了use、as、self、pub等关键字在路径体系中的不可替代地位。self / Self / super / crate模块路径四件套self表示当前模块可用于use self::module::Item显式区分路径起点Self是「正在定义或实现的类型」的类型别名在impl块与 trait 方法返回值中大量出现如fn new() - Selfsuper指向父模块用于相对路径上行crate指向 crate 根构成绝对路径的起点如crate::front_of_house::hosting。dyn、move、mut、ref与语言核心机制绑定的保留词dyn用于 trait 对象实现动态分发见 src/ch18-02-trait-objects.md。Boxdyn Draw这类写法让一组实现了同一 trait 的不同类型可以被统一引用。move让闭包强制获得捕获变量的所有权见 src/ch13-01-closures.md常用于将数据移入新线程等需要所有权转移的场景。mut贯穿引用与模式绑定是可变性的唯一入口ref在模式中按引用绑定与在表达式中的借用相对应模式语法详解见 src/ch19-03-pattern-syntax.md。unsafe是 Rust 中「不保证安全」的显式开关见 src/ch20-01-unsafe-rust.md用于解引用裸指针、调用外部函数、访问可变静态量、实现不安全 trait 等场景。为未来保留的关键字14 个以下关键字目前没有任何功能但被 Rust 预留用于未来可能的使用。把它们当作不可用的标识符即可abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield值得注意的是这份「保留」清单是动态的其中try已在 2018 edition 中从「保留」转为「当前使用」gen则在较新版本中开始承载生成器相关语义。附录 A 强调这些词「尚不具备任何功能」因此即便当前编译器允许在某些位置使用如box曾作为老式指针语法也不应依赖其未定义的行为。如需完整清单可直接核对仓库中的 src/appendix-01-keywords.md。原始标识符Raw Identifiers用 r# 合法使用关键字原始标识符是允许你在正常情况下不允许使用关键字的位置使用关键字的语法只需在关键字前加上r#前缀即可。例如match是关键字。如果试图编译下面这个以match命名的函数源码对应仓库中的src/main.rs文件fn match(needle: str, haystack: str) - bool { haystack.contains(needle) }编译器会报出如下错误error: expected identifier, found keyword match -- src/main.rs:4:4 | 4 | fn match(needle: str, haystack: str) - bool { | ^^^^^ expected identifier, found keyword错误信息表明你不能把关键字match用作函数标识符。要将match用作函数名需要使用原始标识符语法fn r#match(needle: str, haystack: str) - bool { haystack.contains(needle) } fn main() { assert!(r#match(foo, foobar)); }这段代码可以无错编译。注意r#前缀同时出现在函数定义处和main中调用处。原始标识符的三大实际用途自由命名原始标识符允许你使用任何你选择的词作为标识符即使该词恰巧是保留关键字。这给了你更多选择标识符名的自由度。跨语言集成当你的 Rust 程序需要与某种「不把这些词当关键字」的语言编写的程序集成时例如通过 FFI 调用外部符号r#让这些符号可以直接在 Rust 侧引用。跨 edition 使用库原始标识符还允许你使用以与你 crate 不同的 Rust edition 编写的库。跨 edition 集成r#try 实战场景第三点对应附录 E 的说明。以try为例try在 2015 edition 中不是关键字但在 2018、2021 和 2024 edition 中都是关键字src/appendix-05-editions.md 明确记载当前有 2015、2018、2021、2024 四种 edition本书正文按 2024 edition 编写。假设你依赖一个用 2015 edition 编写、并导出了名为try的函数的库你的项目运行在 2018 或更高 editiontry已是关键字直接写try(...)无法编译解决办法是使用原始标识符语法r#try来调用该函数。edition 机制保证了「同一份代码在不同 edition 下解析方式不同」而r#正是跨过这条解析边界的通行证。附录 E 还指出edition 切换只影响编译器最初解析代码的方式因此「2015 项目依赖 2018 库」与「2018 项目依赖 2015 库」都可以正常编译链接新关键字的引入正是 edition 可能带来不兼容变更的典型例子。如何在本仓库中查阅与验证附录 A 源文档src/appendix-01-keywords.md含原始标识符完整示例与错误输出nostarch 排版版见 nostarch/appendix_a.md两者内容一致。附录 B运算符与符号src/appendix-02-operators.md覆盖::、-、等与关键字互补的符号语法。附录 Eeditionssrc/appendix-05-editions.md解释 edition 与关键字演进的关联、Cargo.toml中edition键的默认值缺省为 2015及cargo fix自动升级工具。正文交叉章节use/as/pub usesrc/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md、async/awaitsrc/ch17-01-futures-and-syntax.md、dyntrait 对象src/ch18-02-trait-objects.md、模式中的mut/refsrc/ch19-03-pattern-syntax.md、unsafesrc/ch20-01-unsafe-rust.md。建议把本文或附录 A 源文件作为日常开发的关键字速查表遇到expected identifier, found keyword编译错误时先核对目标词是否在本附录清单中若是改用r#前缀或按附录 E 的方法评估是否需要切换 edition。这样既能写出符合 edition 规范的现代 Rust 代码也能平滑兼容历史库与外部符号。赞分享教程文档【免费下载链接】bookThe Rust Programming Language项目地址https://gitcode.com/gh_mirrors/bo/book点击查看免费下载相关推荐5 轮对话把模糊念头逼成可执行决策grill-me 无状态访谈协议全解5 轮对话把模糊念头逼成可执行决策grill me 无状态访谈协议全解 脑子里有个念头转了两天说不清楚方向像是对的但每想推进一步就撞上一个没答案的细节。教程文档《The Rust Programming Language》附录 D 精讲rustfmt、cargo fix、Clippy 与 rust-analyzer 开发工具链实战《The Rust Programming Language》附录 D 精讲rustfmt、cargo fix、Clippy 与 rust analyzer教程文档Rust 关键字速查手册C 开发者视角下的核心语法对照与实战要义Rust 关键字速查手册C 开发者视角下的核心语法对照与实战要义 本文是 Rust for C Programmers https://link.gitcod文档教程上一篇从裸机到能开机OpCore-Simplify 的 OpenCore EFI 自动配置路径下一篇深入解析 ESLint 文档站的 Rule 宏组件从参数模型到渲染实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考