Updated 'src/appendix/keywords.md'.

This commit is contained in:
Hector PENG
2026-04-30 06:50:30 +08:00
parent edfa6b2855
commit 704304982a
3 changed files with 52 additions and 63 deletions

View File

@@ -134,7 +134,7 @@
- [最终项目:构建多线程的 Web 服务器](Ch21_Final_Project_Building_a_Multithreaded_Web_Server.md)
- [构建单线程的 Web 服务器](final_project/single-threaded.md)
- [从单线程服务器到多线程服务器](final_project/multithreaded.md)
- [优雅关机与资源清理](final_project/graceful_shutdown.md)
- [优雅关机与清理](final_project/graceful_shutdown.md)
- [附录](Appendix.md)
- [A - 关键字](appendix/keywords.md)

View File

@@ -1,67 +1,62 @@
# 附录 A关键字
以下清单包含 Rust 语言当前或今后要用到的一些关键字。此,他们便不能用作标识符(在 [原始标识符](#原始标识符) 小节中咱们将讨论的那些外)了。所谓标识符,是函数、变量、参数、结构体字段、模组、代码箱、常量、宏、静态值、属性、类型、特质或生命周期等的名字。
以下列表包含 Rust 语言当前或预留给 Rust 语言今后使用的关键字。此,他们不能用作标识符(作为“原始标识符”的情况除外,我们将在 [原始标识符](#原始标识符) 小节中讨论)。所谓 *标识符*,是函数、变量、参数、结构体字段、模组、代码箱、常量、宏、静态值、属性、类型、特质或生命周期等的名字。
## 当前在用的关键字
**Keywords Currently in Use**
以下是当前在用关键字的列表,及其功能描述。
- `as`:执行基本类型转换,消除包含某个项目的具体特质的歧义,或重命名 `use` 语句中的项目;
- `async`:返回一个 `Future`,而非阻塞当前线程;
- `await`:暂停执行,知道 `Future` 值的结果就绪;
- `break`:立即退出循环;
- `const`:定义常量项目或常量原始指针;
- `continue`:继续下一循环迭代;
- `crate`:在模组路径中,指向代码箱根;
- `dyn`:对特质对象执行动态分派,参考 [执行动态分派](../oop/trait_objects.md#执行动态分派)
- `else``if``if let` 控制流结构的后备;
- `extern`:链接外部函数或变量;
- `false`:布尔值假的字面值;
- `fn`:定义函数或函数指针类型;
- `for`遍历迭代器中的项目、实现特质或指定更高阶的生命周期a higher-ranked lifetime;
- `if`:根据条件表达式的结果分支;
- `impl`实现固有的或特质的功能implement inherent or trait functionality;
- `in``for` 循环语法的一部分;
- `let`:绑定变量;
- `loop`:无条件循环;
- `match`:将值与模式匹配;
- `mod`:定义模组;
- `move`:使闭包取得其所有捕获值的所有权;
- `mut`:表示引用、原始指针或模式绑定中的可变性;
- `pub`:表示结构体、`impl` 代码块或模组中的公开可见性;
- `ref`:按(通过?)引用绑定;
- `return`:从函数返回;
- `Self`:我们正在定义或实现的类型的类型别名;
- `self`:方法的主体或当前模组;
- `static`:全局变量,或贯穿整个程序执行过程的生命周期;
- `struct`:定义结构体;
- `super`:当前模组的父模组;
- `trait`:定义特质;
- `true`:布尔值真的字面值;
- `type`:定义类型别名或关联类型;
- `union`:定义 [联合体](https://doc.rust-lang.org/reference/items/unions.html);仅在联合体声明中使用是才是关键字;
- `unsafe`:表示不安全代码、函数、特质或实现;
- `use`:带入符号到作用域;
- `where`:表示约束类型的子句;
- `while`:根据表达式的结果有条件地循环。
下面是当前在用关键字的清单,带有其作用描述。
## 保留供今后使用的关键字
- `as` - 执行原生强制转换primitive casting消除包含着某个项目的特定特质歧义disambiguate the specific trait containing a item或重命名 `use` 语句中的项目;
- `async` - 返回一个 `Future` 类型值,而非阻塞当前线程;
- `await` - 在某个 `Future` 值的结果准备好前,暂停程序执行;
- `break` - 立即退出某个循环;
- `const` - 定义出常量项目或常量原始指针;
- `continue` - 继续下一循环迭代;
- `crate` - 在模组路径中,指向代码箱根;
- `dyn` - 动态调遣到某个特质对象,参考 [特质对象执行动态调遣](Ch17_Object_Oriented_Programming_Features_of_Rust.md#特质对象执行动态调遣);
- `else` - `if` 的回退,及 `if let` 控制流的构件;
- `extern` - 链接外部函数或变量;
- `false` - 布尔值假的字面值;
- `fn` - 定义出某个函数或函数指针类型;
- `for` - 对某个迭代器的项目加以迭代、实现某个特质或指明某个更高级别的生命周期a higher-ranked lifetime;
- `if` - 基于某个条件表达式结果的分支;
- `impl` - 实现固有或特质功能implement inherent or trait functionality;
- `in` - `for` 循环语法的一部分;
- `let` - 绑定某个变量;
- `loop` - 无条件地循环;
- `match` - 将某个值与模式匹配;
- `mod` - 定义出模组;
- `move` - 领导闭包取得其所有捕获值的所有权;
- `mut` - 注解出引用、原始指针或模式绑定等中的可变性;
- `pub` - 注解出结构体、`impl` 代码块或模组等中的公开可见性;
- `ref` - 按引用绑定;
- `return` - 自函数返回值;
- `Self` - 咱们正定义或实现中类型的类型别名;
- `self` - 方法主体method subject或当前模组
- `static` - 在整个程序执行过程持续有效的全局变量或生命周期;
- `struct` - 定义出某个结构体;
- `super` - 当前模组的父模组;
- `trait` - 定义出某个特质;
- `true` - 布尔值真的字面值;
- `type` - 定义出某个类型别名或关联类型;
- `union` - 定义出某个 [联合体](https://doc.rust-lang.org/reference/items/unions.html),是在联合体声明时用到的唯一关键字;
- `unsafe` - 注解非安全代码、函数、特质或一些实现;
- `use` - 将符号带入到作用域;
- `where` - 注解约束某个类型的子句;
- `while` - 基于某个表达式结果而有条件的循环。
## 为今后使用保留的关键字
**Keywords Reserved for Future Use**
以下关键字尚无任何功能,但被 Rust 为今后的潜在使用而保留。
以下关键字尚无任何功能,但被 Rust 保留供今后使用。
- `abstract`
- `become`
- `box`
- `do`
- `final`
- `gen`
- `macro`
- `override`
- `priv`
@@ -74,12 +69,9 @@
## 原始标识符
**Raw Identifiers**
所谓 *原始标识符*,属于一种语法,允许咱们在通常不允许使用地方使用关键字。咱们可以通过在关键字前加上 `r#` 来使用原始标识符。
*原始标识符raw identifiers* 属于允许实现使用一般不被允许关键字的语法。是通过在关键字前加上前缀 `r#`,使用原始标识符的。
比如,`match` 是个关键字。在咱们尝试编译下面这个使用 `match` 作其名字的函数时:
例如,`match` 是个关键字。当咱们尝试编译以下使用 `match` 作为函数名字的函数时:
文件名:`src/main.rs`
@@ -89,7 +81,7 @@ fn match(needle: &str, haystack: &str) -> bool {
}
```
咱们将得到这样的报错:
咱们将得到下面这个报错:
```console
error: expected identifier, found keyword `match`
@@ -99,7 +91,7 @@ error: expected identifier, found keyword `match`
| ^^^^^ expected identifier, found keyword
```
报错显示咱们无法将关键字 `match` 作函数标识符。要 `match` 作函数名字,咱们需要使用原始标识符语法,像下面这样:
报错表明,咱们不能使用关键字 `match`函数标识符。要使用 `match`函数名字,咱们需要使用 *原始标识符语法*,像下面这样:
文件名:`src/main.rs`
@@ -113,11 +105,8 @@ fn main() {
}
```
代码将不带任何错误编译。请注意那个函数定义中, `main`函数被调用处名字上的 `r#` 前缀。
这段代码将在没有任何错误编译。请注意函数定义中,以及 `main` 中函数被调用处,函数名字上的 `r#` 前缀。
原始标识符实现了将任何咱们所选的词语用作标识符,即使那个词语碰巧是个保留关键字。这给到咱们更自由选择标识符名字,以及实现与一些以其中这些词语不属于关键字的语言,所编写的程序集成。此外,原始标识符实现了,对那些以不同于咱们代码箱 Rust 版本编写库加以运用。比如,在 2015 版中 `try`不是个关键字,但在 2018 版中却是。咱们依赖于一个使用 2015 版本编写的库,而该库有一`try` 函数,那么咱们将需要在这种情况下,使用原始标识符 `r#try`,来从咱们的 2018 版本的代码调用那个函数。请参阅 [附录 E](#appendix-e) 了解更多有关版本的信息
End
原始标识符允许咱们使用所选的任何单词作为标识符,即使该单词恰好是保留关键字。这给予了我们更自由选择标识符名字,同时也让我们可以与那些以其中这些单词不是关键字的语言编写的程序集成。此外,原始标识符允许咱们使用与咱们代码箱使用的 Rust 版本不同的代码箱。例如,`try` 在 2015 版中不是个关键字,但在 2018、2021 和 2024 版中却是。咱们依赖个使用 2015 版本编写的库,并有`try` 函数,咱们将需要使用原始标识符语法,在这种情况下的 `r#try`,以在更高版本的代码调用函数。有关版本的更多信息,请参阅 [附录 E](./editions.md)

View File

@@ -1,4 +1,4 @@
# 优雅关机和资源清理
# 优雅关机清理
[清单 21-20](./multithreaded.md#listing_21-20) 中的代码正如我们预期的那样,通过使用线程池以异步方式响应请求。我们会收到一些关于 `worker``id``thread` 等我们没有直接使用的字段的告警,这提醒我们没有清理任何东西。当我们使用不太优雅的 `Ctrl + c` 方法停止主线程时,所有其他线程也会立即停止,即使他们正处于服务请求状态。