diff --git a/src/ch00-00-introduction.md b/src/ch00-00-introduction.md
index 4866063..41ad810 100644
--- a/src/ch00-00-introduction.md
+++ b/src/ch00-00-introduction.md
@@ -17,19 +17,19 @@ Rust 被证明是可用于大型的、拥有不同层次系统编程知识的开
Rust 也为系统编程世界带来了现代化的开发工具:
-* Cargo,内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使其在 Rust 生态系统中保持一致。
-* Rustfmt 确保开发者遵循一致的代码风格。
-* Rust Language Server 为集成开发环境(IDE)提供了强大的代码补全和内联错误信息功能。
+- Cargo,内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使其在 Rust 生态系统中保持一致。
+- Rustfmt 确保开发者遵循一致的代码风格。
+- Rust Language Server 为集成开发环境(IDE)提供了强大的代码补全和内联错误信息功能。
通过使用 Rust 生态系统中的这些和其他工具,开发者可以在编写系统层面代码时保持高生产力。
### 学生
-Rust 适用于学生和对学习系统概念感兴趣的其他人。通过 Rust,很多人已经了解了操作系统开发等主题。社区非常欢迎和乐于解答学生们的问题。通过本书的努力,Rust 团队希望系统概念能被更多人了解,特别是编程新手。
+Rust 适用于学生和对学习系统概念感兴趣的其他人。通过 Rust,很多人已经了解了操作系统开发等主题。社区非常欢迎并乐于解答学生们的问题。通过本书的努力,Rust 团队希望系统概念能被更多人了解,特别是编程新手。
### 公司
-数以百计的公司,无论规模大小,都在生产中使用Rust来完成各种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎、物联网(internet of things, IOT)程序、机器学习,甚至还包括 Firefox 浏览器的大部分内容。
+数以百计的公司,无论规模大小,都在生产中使用 Rust 来完成各种任务。这些任务包括命令行工具、web 服务、DevOps 工具、嵌入式设备、音视频分析与转码、加密货币(cryptocurrencies)、生物信息学(bioinformatics)、搜索引擎、物联网(internet of things, IOT)程序、机器学习,甚至还包括 Firefox 浏览器的大部分内容。
### 开源开发者
@@ -39,7 +39,7 @@ Rust 适用于希望构建 Rust 编程语言、社区、开发工具和库的开
Rust 适用于追求编程语言的速度与稳定性的开发者。所谓速度,是指你用 Rust 开发出的程序运行速度,以及 Rust 提供的程序开发速度。Rust 的编译器检查确保了增加功能和重构代码时的稳定性。这与缺少这些检查的语言形成鲜明对比,开发者通常害怕修改那些脆弱的遗留代码。力求零开销抽象(zero-cost abstractions),把高级的特性编译成底层的代码,这样写起来很快,运行起来也很快,Rust 致力于使安全的代码也同样快速。
-Rust 语言也希望能支持很多其他用户,这里提及的只是最大的利益相关者。总的来讲,Rust 最重要的目标是消除数十年来开发者不得不做的权衡:安全**与**生产力,速度**与**人机交互的顺畅度(ergonomics)。请尝试 Rust,看看这个选择是否适合你。
+Rust 语言也希望能支持很多其他用户,这里提及的只是最大的利益相关者。总的来讲,Rust 最重要的目标是消除数十年来开发者不得不做的权衡:安全**与**生产力,速度**与**人机交互的顺畅度(ergonomics)。请尝试 Rust,看看这个选择是否适合你。
## 本书是写给谁的
@@ -55,7 +55,7 @@ Rust 语言也希望能支持很多其他用户,这里提及的只是最大的
第 5 章讨论结构体和方法,第 6 章介绍枚举、`match` 表达式和 `if let` 控制流结构。在 Rust 中,你将使用结构体和枚举创建自定义类型。
-第 7 章你会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序接口(Application Programming Interface, API)。第 8 章讨论了一些标准库提供的常见集合数据结构,比如 可变长数组(vector)、字符串和哈希 map。第 9 章探索了 Rust 的错误处理哲学和技术。
+第 7 章你会学习 Rust 的模块系统和私有性规则来组织代码和公有应用程序接口(Application Programming Interface, API)。第 8 章讨论了一些标准库提供的常见集合数据结构,比如可变长数组(vector)、字符串和哈希 map。第 9 章探索了 Rust 的错误处理哲学和技术。
第 10 章深入介绍泛型、trait 和生命周期,他们提供了定义出适用于多种类型的代码的能力。第 11 章全部关于测试,即使 Rust 有安全保证,也需要测试确保程序逻辑正确。第 12 章,我们构建了属于自己的在文件中搜索文本的命令行工具 `grep` 的子集功能实现。为此会利用之前章节讨论的很多概念。
@@ -75,10 +75,10 @@ Rust 语言也希望能支持很多其他用户,这里提及的只是最大的
学习 Rust 的过程中一个重要的部分是学习如何阅读编译器提供的错误信息:它们会指导你编写出能工作的代码。为此,我们会提供很多不能编译的示例,以及各个情况下编译器会展示的错误信息。请注意如果随便输入并运行随机的示例代码,它们可能无法编译!请确保阅读任何你尝试运行的示例周围的文本内容,检查它们是否有意写错。Ferris 也会帮助你区别那些有意无法工作的代码:
-| Ferris | 意义 |
-|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
-| | 这些代码不能编译! |
-| | 这些代码会 panic! |
+| Ferris | 意义 |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------- |
+| | 这些代码不能编译! |
+| | 这些代码会 panic! |
| | 这些代码没有产生期望的行为。 |
在大部分情况,我们会指引你将任何不能编译的代码纠正为正确版本。
diff --git a/src/ch01-00-getting-started.md b/src/ch01-00-getting-started.md
index af89910..01b9f69 100644
--- a/src/ch01-00-getting-started.md
+++ b/src/ch01-00-getting-started.md
@@ -2,6 +2,6 @@
让我们开始 Rust 之旅吧!有很多内容需要学习,但每次旅程总有起点。在本章中,我们会讨论:
-* 在 Linux、macOS 和 Windows 上安装 Rust
-* 编写一个打印 `Hello, world!` 的程序
-* 使用 `cargo`,这是 Rust 的包管理器和构建系统
+- 在 Linux、macOS 和 Windows 上安装 Rust
+- 编写一个打印 `Hello, world!` 的程序
+- 使用 `cargo`,这是 Rust 的包管理器和构建系统
diff --git a/src/ch01-03-hello-cargo.md b/src/ch01-03-hello-cargo.md
index 08358a1..3c98079 100644
--- a/src/ch01-03-hello-cargo.md
+++ b/src/ch01-03-hello-cargo.md
@@ -118,10 +118,10 @@ $ cargo check
我们回顾下已学习的 Cargo 内容:
-* 可以使用 `cargo build` 构建项目。
-* 可以使用 `cargo run` 一步构建并运行项目。
-* 可以使用 `cargo check` 构建项目而无需生成二进制文件来检查错误。
-* 有别于将构建结果放在与源码相同的目录,Cargo 会将其放到 *target/debug* 目录。
+- 可以使用 `cargo build` 构建项目。
+- 可以使用 `cargo run` 一步构建并运行项目。
+- 可以使用 `cargo check` 构建项目而无需生成二进制文件来检查错误。
+- 有别于将构建结果放在与源码相同的目录,Cargo 会将其放到 _target/debug_ 目录。
使用 Cargo 的一个额外的优点是,不管你使用什么操作系统,其命令都是一样的。所以从现在开始本书将不再为 Linux 、macOS 或 Windows 提供平台特定的命令。
@@ -149,11 +149,11 @@ $ cargo build
你已经准备好开启 Rust 之旅了!在本章中,你学习了如何:
-* 使用 `rustup` 安装最新稳定版的 Rust
-* 更新到新版的 Rust
-* 打开本地安装的文档
-* 直接通过 `rustc` 编写并运行 Hello, world! 程序
-* 使用更常用的 Cargo 创建并运行新项目
+- 使用 `rustup` 安装最新稳定版的 Rust
+- 更新到新版的 Rust
+- 打开本地安装的文档
+- 直接通过 `rustc` 编写并运行 “Hello, world!” 程序
+- 使用更常用的 Cargo 创建并运行新项目
是时候通过构建更具强大的程序来熟悉阅读和编写 Rust 代码了。所以在第 2 章我们会构建一个猜数字游戏程序。如果你更愿意从学习 Rust 常用的编程概念开始,请阅读第 3 章,接着再回到第 2 章。
diff --git a/src/ch03-01-variables-and-mutability.md b/src/ch03-01-variables-and-mutability.md
index dab7654..e43e28b 100644
--- a/src/ch03-01-variables-and-mutability.md
+++ b/src/ch03-01-variables-and-mutability.md
@@ -20,8 +20,7 @@
这个例子展示了编译器如何帮助你查找程序中的错误。编译器错误可能令人沮丧,但它们也只是表明你的程序做你想做的事情并不安全;并**不**意味着你不是一个好开发者!有经验的 Rustacean(Rust 开发者) 依然会遇到编译错误。
-上面的错误指出错误的原因是 `` cannot
-assign twice to immutable variable `x` ``(不能对不可变变量二次赋值),因为我们尝试给不可变的 `x` 变量赋值为第二个值。
+上面的错误指出错误的原因是 `` cannot assign twice to immutable variable `x` ``(不能对不可变变量二次赋值),因为我们尝试给不可变的 `x` 变量赋值为第二个值。
当我们尝试改变一个前面指定为不可变的值时我们会得到编译期错误,这点很重要,因为这种情况很可能导致 bug。如果我们代码的一部分假设某个值永远不会更改,而代码的另一部分更改了该值,那很可能第一部分代码以不可意料的方式运行。这个 bug 的根源在实际开发中可能很难追踪,特别是第二部分代码只是**偶尔**变更了原来的值。Rust 编译器保证了当我们声明了一个值不会改变时,那它就真的不可改变,所以你不必亲自跟踪这个值。这可以使得代码更容易理解。
diff --git a/src/ch03-02-data-types.md b/src/ch03-02-data-types.md
index d86cf0a..d4a5766 100644
--- a/src/ch03-02-data-types.md
+++ b/src/ch03-02-data-types.md
@@ -37,8 +37,7 @@ let guess: u32 = "42".parse().expect("Not a number!");
每个定义形式要么是有符号类型要么是无符号类型,且带有一个显式的大小。**有符号**和**无符号**表示数字能否取负数——也就是说,这个数是否可能是负数(有符号类型),或一直为正而不需要带上符号(无符号类型)。就像在纸上写数字一样:当要强调符号时,数字前面可以带上正号或负号;然而,当很明显确定数字为正数时,就不需要加上正号了。有符号数字以[二进制补码](https://en.wikipedia.org/wiki/Two%27s_complement)(译者补充:[“补码”百度百科](https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613))形式存储。
-每个有符号类型规定的数字范围是 -(2n - 1) ~ 2n -
-1 - 1,其中 `n` 是该定义形式的位长度。所以 `i8` 可存储数字范围是 -(27) ~ 27 - 1,即 -128 ~ 127。无符号类型可以存储的数字范围是 0 ~ 2n - 1,所以 `u8` 能够存储的数字为 0 ~ 28 - 1,即 0 ~ 255。
+每个有符号类型规定的数字范围是 -(2n - 1) ~ 2n - 1 - 1,其中 `n` 是该定义形式的位长度。所以 `i8` 可存储数字范围是 -(27) ~ 27 - 1,即 -128 ~ 127。无符号类型可以存储的数字范围是 0 ~ 2n - 1,所以 `u8` 能够存储的数字为 0 ~ 28 - 1,即 0 ~ 255。
此外,`isize` 和 `usize` 类型取决于程序运行的计算机体系结构,在表中表示为“arch”:若使用 64 位架构系统则为 64 位,若使用 32 位架构系统则为 32 位。
@@ -47,11 +46,11 @@ let guess: u32 = "42".parse().expect("Not a number!");
表 3-2: Rust 的整型字面量
| 数字字面量 | 示例 |
-|------------------|---------------|
-| 十进制 | `98_222` |
-| 十六进制 | `0xff` |
-| 八进制 | `0o77` |
-| 二进制 | `0b1111_0000` |
+| ------------------ | ------------- |
+| 十进制 | `98_222` |
+| 十六进制 | `0xff` |
+| 八进制 | `0o77` |
+| 二进制 | `0b1111_0000` |
| 字节 (仅限于 `u8`) | `b'A'` |
那么该使用哪种类型的整型呢?如果不确定,Rust 的默认形式通常是个不错的选择,整型默认是 `i32`。`isize` 和 `usize` 的主要应用场景是用作某些集合的索引。
@@ -93,7 +92,7 @@ Rust 的所有数字类型都支持基本数学运算:加法、减法、乘法
{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs}}
```
-这些语句中的每个表达式都使用了数学运算符,并且计算结果为一个值,然后绑定到一个变量上。[附录 B][appendix_b] 罗列了 Rust 提供的所有运算符。
+这些语句中的每个表达式都使用了数学运算符,并且计算结果为一个值,然后绑定到一个变量上。[附录 B][appendix_b] 罗列了 Rust 提供的所有运算符的列表。
#### 布尔类型
@@ -109,7 +108,7 @@ Rust 的所有数字类型都支持基本数学运算:加法、减法、乘法
#### 字符类型
-Rust 的 `char` (字符)类型是该语言最基本的字母类型,下面是一些声明 `char` 值的例子:
+Rust 的 `char`(字符)类型是该语言最基本的字母类型,下面是一些声明 `char` 值的例子:
文件名:src/main.rs
@@ -231,12 +230,11 @@ thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
-该程序在索引操作中使用无效值时导致**运行时**(*runtime*)错误。程序退出并显示错误消息,未执行后面的 `println!` 语句。当你尝试使用索引访问元素时,Rust 将检查你指定的索引是否小于数组长度。如果索引大于或等于数组长度,Rust会出现 `panic`。这种检查必须在运行时进行,尤其是在这种情况下,因为编译器可能无法知道用户之后运行代码时将输入什么值。
+该程序在索引操作中使用无效值时导致**运行时**(*runtime*)错误。程序退出并显示错误消息,未执行后面的 `println!` 语句。当你尝试使用索引访问元素时,Rust 将检查你指定的索引是否小于数组长度。如果索引大于或等于数组长度,Rust 会出现 `panic`。这种检查必须在运行时进行,尤其是在这种情况下,因为编译器可能无法知道用户之后运行代码时将输入什么值。
这是 Rust 在实践中安全原则的第一个例子。在很多低级语言中,并不进行这种检查,而且在你使用不正确的索引时,可以访问无效的内存。Rust 通过立即退出来的方式防止这种错误,而不是允许内存访问并继续运行程序。第 9 章将进一步讨论 Rust 的错误处理。
-[comparing-the-guess-to-the-secret-number]:
-ch02-00-guessing-game-tutorial.html#比较猜测的数字和秘密数字
+[comparing-the-guess-to-the-secret-number]: ch02-00-guessing-game-tutorial.html#比较猜测的数字和秘密数字
[control-flow]: ch03-05-control-flow.html#控制流
[strings]: ch08-02-strings.html#使用字符串存储-utf-8-编码的文本
[stack-and-heap]: ch04-01-what-is-ownership.html#栈stack与堆heap
diff --git a/src/ch03-03-how-functions-work.md b/src/ch03-03-how-functions-work.md
index 7121581..0d5ca00 100644
--- a/src/ch03-03-how-functions-work.md
+++ b/src/ch03-03-how-functions-work.md
@@ -113,7 +113,7 @@ Rust 中的函数定义以 `fn` 开始,后跟着函数名和一对圆括号。
}
```
-是一个代码块,在这个例子中计算结果是 `4`。这个值作为 `let` 语句的一部分被绑定到 `y` 上。注意,`x+1` 行的末尾没有分号,这与你目前见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的末尾加上分号,那么它就转换为语句,而语句不会返回值。在接下来探讨函数返回值和表达式时,请记住这一点。
+是一个代码块,在这个例子中计算结果是 `4`。这个值作为 `let` 语句的一部分被绑定到 `y` 上。注意,`x + 1` 行的末尾没有分号,这与你目前见过的大部分代码行不同。表达式的结尾没有分号。如果在表达式的末尾加上分号,那么它就转换为语句,而语句不会返回值。在接下来探讨函数返回值和表达式时,请记住这一点。
### 带有返回值的函数
diff --git a/src/ch03-04-comments.md b/src/ch03-04-comments.md
index 50752ef..0dd1ee3 100644
--- a/src/ch03-04-comments.md
+++ b/src/ch03-04-comments.md
@@ -32,4 +32,4 @@
{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs}}
```
-Rust 还具有另一种注释,即文档注释,我们将在第 14 章的“将 crate 发布到 Crates.io” 章节中进行讨论。
+Rust 还具有另一种注释,即文档注释,我们将在第 14 章的 “将 crate 发布到 Crates.io” 章节中进行讨论。
diff --git a/src/ch03-05-control-flow.md b/src/ch03-05-control-flow.md
index c2a50e5..5c65a86 100644
--- a/src/ch03-05-control-flow.md
+++ b/src/ch03-05-control-flow.md
@@ -253,7 +253,5 @@ again!
当你准备好继续前进时,我们将讨论一个其他语言中**并不**常见的概念:所有权(ownership)。
-[comparing-the-guess-to-the-secret-number]:
-ch02-00-guessing-game-tutorial.html#比较猜测的数字和秘密数字
-[quitting-after-a-correct-guess]:
-ch02-00-guessing-game-tutorial.html#猜测正确后退出
+[comparing-the-guess-to-the-secret-number]: ch02-00-guessing-game-tutorial.html#比较猜测的数字和秘密数字
+[quitting-after-a-correct-guess]: ch02-00-guessing-game-tutorial.html#猜测正确后退出
diff --git a/src/title-page.md b/src/title-page.md
index b991b4f..4c13e99 100644
--- a/src/title-page.md
+++ b/src/title-page.md
@@ -12,7 +12,7 @@
> 6. 本站支持文档中英文切换,点击页面右上角语言图标可切换到相同章节的英文页面,**英文版每天都会自动同步一次官方的最新版本**。
> 7. 若发现当前页表达错误或帮助我们改进翻译,可点击右上角的编辑按钮打开该页对应源码文件进行编辑和修改,Rust 中文资源的开源组织发展离不开大家,感谢您的支持和帮助!
-本书的版本假定你使用 Rust 1.58(2022 年 1 月 13 日发布) 或更高版本。请参阅[第 1 章的“安装”章节][install]来安装或更新 Rust。
+本书的版本假定你使用 Rust 1.58(2022 年 1 月 13 日发布)或更高版本。请参阅[第 1 章的“安装”章节][install]来安装或更新 Rust。
本文档的 HTML 格式在线版为 [https://rustwiki.org/zh-CN/book/](https://rustwiki.org/zh-CN/book/) (英文版为:[https://doc.rust-lang.org/stable/book/](https://doc.rust-lang.org/stable/book/));而离线版在使用 `rustup` 安装 Rust 后附带(注:目前此命令附带的文档只包含英文版,中文离线版可拉取[本书的中文翻译 GitHub 仓库][book-cn]生成) ,运行 `rustup docs --book` 来打开本书。