diff --git a/README.md b/README.md
index f7583960..6f845e30 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
@@ -18,6 +18,8 @@
- [Rust语言周刊](https://github.com/sunface/rust-weekly),每周一发布,精选过去一周的技术文章、业界新闻、开源项目和 Rust 语言动态
- [Rust酷库推荐](https://github.com/sunface/fancy-rust),优秀项目很多,如何在茫茫码海中与它们相遇?相比 Awesome Rust,它能带给你全新的体验和选择
+- 创作团队: [RustTT 翻译组](https://rusttt.org),目前最专业的 Rust 翻译组织,这里有 Rust 技术文章、学习教程和新闻资讯的高质量中文翻译
+
## 教程简介
@@ -68,6 +70,7 @@ QQ群 1009730433, 欢迎大家加入,一起 happy,一起进步。
尤其感谢这些主要贡献者,谢谢你们花费大量时间贡献了多处`fix`和高质量的内容优化。非常感动,再次感谢~~
+
## 借鉴的书籍
站在巨人的肩膀上,能帮我们看的更远,特此感谢以下巨人:
diff --git a/src/about-book.md b/src/about-book.md
index 6c577d8b..042fe764 100644
--- a/src/about-book.md
+++ b/src/about-book.md
@@ -1,7 +1,7 @@
Rust语言圣经
-
+
diff --git a/src/advance/confonding/slice.md b/src/advance/confonding/slice.md
index 1abd097f..fab21e07 100644
--- a/src/advance/confonding/slice.md
+++ b/src/advance/confonding/slice.md
@@ -24,7 +24,7 @@ error[E0277]: the size for values of type `str` cannot be known at compilation t
| ^^^^^^ doesn't have a size known at compile-time
```
-编译器准确的告诉了我们原因:`str` 字符串切片它是 [`DST` 动态大小类型](https://course.rs/advance/custom-type.html#动态大小类型),这意味着编译器无法在编译期知道 `str` 类型的大小,只有到了运行期才能动态获知,这对于强类型、强安全的 Rust 语言来说是不可接受的。
+编译器准确的告诉了我们原因:`str` 字符串切片它是 [`DST` 动态大小类型](https://course.rs/advance/into-types/sized.html#动态大小类型-dst),这意味着编译器无法在编译期知道 `str` 类型的大小,只有到了运行期才能动态获知,这对于强类型、强安全的 Rust 语言来说是不可接受的。
也就是说,我们无法直接使用 `str`,而对于 `[u8]` 也是类似的,大家可以自己动手试试。
@@ -69,7 +69,7 @@ let s3: &[i32] = &arr[1..3];
我们常常说使用切片,实际上我们在用的是切片的引用,我们也在频繁说使用字符串,实际上我们在使用的也是字符串切片的引用。
-总之,切片在 Rust 中是动态类型 DST,是无法被我们直接使用的,而我们在使用的都是切片的引用。
+总之,切片在 Rust 中是动态大小类型 DST,是无法被我们直接使用的,而我们在使用的都是切片的引用。
| 切片 | 切片引用 |
| -------------- | --------------------- |
diff --git a/src/advance/confonding/string.md b/src/advance/confonding/string.md
index 640a1e95..9111e1fc 100644
--- a/src/advance/confonding/string.md
+++ b/src/advance/confonding/string.md
@@ -8,7 +8,7 @@ Rust 语言的类型可以大致分为两种:基本类型和标准库类型,
## str
如上所述,`str` 是唯一定义在 Rust 语言特性中的字符串,但是也是我们几乎不会用到的字符串类型,为何?
-原因在于 `str` 字符串它是 [`DST` 动态大小类型](https://course.rs/advance/custom-type.html#动态大小类型),这意味着编译器无法在编译期知道 `str` 类型的大小,只有到了运行期才能动态获知,这对于强类型、强安全的 Rust 语言来说是不可接受的。
+原因在于 `str` 字符串它是 [`DST` 动态大小类型](https://course.rs/advance/into-types/sized.html#动态大小类型-dst),这意味着编译器无法在编译期知道 `str` 类型的大小,只有到了运行期才能动态获知,这对于强类型、强安全的 Rust 语言来说是不可接受的。
```rust
let string: str = "banana";
@@ -28,7 +28,7 @@ error[E0277]: the size for values of type `str` cannot be known at compilation t
同时还是 String 和 &str 的底层数据类型。 由于 str 是动态
-`str` 类型是硬编码进可执行文件,也无法被修改,但是 `String` 则是一个可增长、可改变且具有所有权的 UTF8 编码字符串,**当 Rust 用户提到字符串时,往往指的就是 `String` 类型和 `&str` 字符串切片类型,这两个类型都是 UTF8 编码**。
+`str` 类型是硬编码进可执行文件,也无法被修改,但是 `String` 则是一个可增长、可改变且具有所有权的 UTF-8 编码字符串,**当 Rust 用户提到字符串时,往往指的就是 `String` 类型和 `&str` 字符串切片类型,这两个类型都是 UTF-8 编码**。
除了 `String` 类型的字符串,Rust 的标准库还提供了其他类型的字符串,例如 `OsString`, `OsStr`, `CsString` 和` CsStr` 等,注意到这些名字都以 `String` 或者 `Str` 结尾了吗?它们分别对应的是具有所有权和被借用的变量。
diff --git a/src/async-rust/async/pain-points-and-workarounds.md b/src/async-rust/async/pain-points-and-workarounds.md
index ba512253..1b536dfa 100644
--- a/src/async-rust/async/pain-points-and-workarounds.md
+++ b/src/async-rust/async/pain-points-and-workarounds.md
@@ -154,7 +154,7 @@ enum Recursive {
}
```
-这是典型的[动态大小类型](../advance/custom-type.md#动态大小类型),它的大小会无限增长,因此编译器会直接报错:
+这是典型的[动态大小类型](../advance/into-types/sized.md#动态大小类型-dst),它的大小会无限增长,因此编译器会直接报错:
```shell
error[E0733]: recursion in an `async fn` requires boxing
diff --git a/src/basic/compound-type/string-slice.md b/src/basic/compound-type/string-slice.md
index 6fcd009e..90f8fd6b 100644
--- a/src/basic/compound-type/string-slice.md
+++ b/src/basic/compound-type/string-slice.md
@@ -339,7 +339,7 @@ note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
因此在通过索引区间来访问字符串时,**需要格外的小心**,一不注意,就会导致你程序的崩溃!
-## 操作 UTF8 字符串
+## 操作 UTF-8 字符串
前文提到了几种使用 UTF-8 字符串的方式,下面来一一说明。
diff --git a/src/basic/flow-control.md b/src/basic/flow-control.md
index 3890a120..f9ed7085 100644
--- a/src/basic/flow-control.md
+++ b/src/basic/flow-control.md
@@ -216,7 +216,7 @@ for item in collection {
}
```
-上面代码对 1 到 3 的序列进行迭代,在遇到值为 2 时的跳出整个循环,后面的循环不在执行,输出如下:
+上面代码对 1 到 3 的序列进行迭代,在遇到值为 2 时的跳出整个循环,后面的循环不再执行,输出如下:
```console
1
diff --git a/src/index-list.md b/src/index-list.md
index 954b3b99..8f51e7fe 100644
--- a/src/index-list.md
+++ b/src/index-list.md
@@ -46,14 +46,16 @@
## B
-| 名称 | 关键字 | 简介 |
-| ----------- | --------- | -------------------------------------- |
-| [变量遮蔽] | shadowing | 允许声明相同的变量名,后者会遮蔽掉前者 |
-| [表达式] | | 进行求值,结尾无 `;`,有返回值 |
-| [bool 布尔] | 布尔类型 | `true` `false`,占用 1 字节 |
-| B | KWB | BIntroduction |
+| 名称 | 关键字 | 简介 |
+| ------------ | --------- | -------------------------------------- |
+| [变量遮蔽] | shadowing | 允许声明相同的变量名,后者会遮蔽掉前者 |
+| [变量作用域] | 所有权 | 作用域是一个变量在程序中有效的范围 |
+| [表达式] | | 进行求值,结尾无 `;`,有返回值 |
+| [bool 布尔] | 布尔类型 | `true` `false`,占用 1 字节 |
+| B | KWB | BIntroduction |
[变量遮蔽]: https://course.rs/basic/variable.html#变量遮蔽shadowing
+[变量作用域]: https://course.rs/basic/ownership/ownership.html#变量作用域
[bool 布尔]: https://course.rs/basic/base-type/char-bool.html#布尔bool
[表达式]: https://course.rs/basic/base-type/statement-expression.html#表达式
@@ -61,14 +63,18 @@
## C
-| 名称 | 关键字 | 简介 |
-| ------------ | -------- | --------------------------------- |
-| [char 字符] | 字符类型 | 使用 `''` 表示,所有的 Unicode 值 |
-| [const 常量] | constant | const MAX_POINTS: u32 = 100_000; |
-| C | KWC | CIntroduction |
+| 名称 | 关键字 | 简介 |
+| ------------ | -------- | ----------------------------------------------------------------------------------- |
+| [char 字符] | 字符类型 | 使用 `''` 表示,所有的 Unicode 值 |
+| [const 常量] | constant | const MAX_POINTS: u32 = 100_000; |
+| [Copy 拷贝] | 浅拷贝 | 任何基本类型的组合可以 `Copy`,不需要分配内存或某种形式资源的类型是可以 `Copy` 的。 |
+| [Clone 克隆] | 深拷贝 | 需要复制堆上的数据时,可以使用 `.clone()` 方法 |
+| C | KWC | CIntroduction |
[char 字符]: https://course.rs/basic/base-type/char-bool.html#字符类型char
[const 常量]: https://course.rs/basic/variable.html#变量和常量之间的差异
+[copy 拷贝]: https://course.rs/basic/ownership/ownership.html#拷贝浅拷贝
+[clone 克隆]: https://course.rs/basic/ownership/ownership.html#克隆深拷贝
[back](#head)
@@ -157,9 +163,12 @@
## M
-| 名称 | 关键字 | 简介 |
-| ---- | ------ | ------------- |
-| M | KWM | MIntroduction |
+| 名称 | 关键字 | 简介 |
+| ----------- | ---------- | ----------------------------------------------------- |
+| [move 移动] | 转移所有权 | `let s2 = s1;`
`s1` 所有权转移给了 `s2`,`s1` 失效 |
+| M | KWM | MIntroduction |
+
+[move 移动]: https://course.rs/basic/ownership/ownership.html#转移所有权
[back](#head)
@@ -208,9 +217,14 @@
## S
-| 名称 | 关键字 | 简介 |
-| ---- | ------ | ------------- |
-| S | KWS | SIntroduction |
+| 名称 | 关键字 | 简介 |
+| -------------- | ------ | ------------------------------------------------------------------------------------------------------ |
+| [所有权与堆栈] | | Rust 所有权提供的强大保障 |
+| [所有权原则] | | Rust 中每一个值都 `有且只有` 一个所有者(变量)
当所有者(变量)离开作用域范围时,这个值将被丢弃(drop) |
+| S | KWS | SIntroduction |
+
+[所有权与堆栈]: https://course.rs/basic/ownership/ownership.html#所有权与堆栈
+[所有权原则]: https://course.rs/basic/ownership/ownership.html#所有权原则
[back](#head)