diff --git a/src/advance/unsafe/intro.md b/src/advance/unsafe/intro.md index f13e16e7..9a71f5fe 100644 --- a/src/advance/unsafe/intro.md +++ b/src/advance/unsafe/intro.md @@ -42,7 +42,7 @@ fn main() { } ``` -上面代码中, `r1` 是一个裸指针(又称裸指针,raw pointer),由于它具有破坏 Rust 内存安全的潜力,因此只能在 `unsafe` 代码块中使用,如果你去掉 `unsafe {}`,编译器会立刻报错。 +上面代码中, `r1` 是一个裸指针(raw pointer),由于它具有破坏 Rust 内存安全的潜力,因此只能在 `unsafe` 代码块中使用,如果你去掉 `unsafe {}`,编译器会立刻报错。 言归正传, `unsafe` 能赋予我们 5 种超能力,这些能力在安全的 Rust 代码中是无法获取的: diff --git a/src/advance/unsafe/superpowers.md b/src/advance/unsafe/superpowers.md index aa14868b..1d1c650c 100644 --- a/src/advance/unsafe/superpowers.md +++ b/src/advance/unsafe/superpowers.md @@ -4,7 +4,7 @@ ## 解引用裸指针 -裸指针(raw pointer) 又称裸指针,在功能上跟引用类似,同时它也需要显式地注明可变性。但是又和引用有所不同,裸指针长这样: `*const T` 和 `*mut T`,它们分别代表了不可变和可变。 +裸指针(raw pointer,又称原生指针) 在功能上跟引用类似,同时它也需要显式地注明可变性。但是又和引用有所不同,裸指针长这样: `*const T` 和 `*mut T`,它们分别代表了不可变和可变。 大家在之前学过 `*` 操作符,知道它可以用于解引用,但是在裸指针 `*const T` 中,这里的 `*` 只是类型名称的一部分,并没有解引用的含义。 @@ -407,7 +407,7 @@ extern "C" { - 数据竞争 - 内存对齐问题 -但是需要注意的是,它只能帮助识别被执行代码路径的风险,哪些未被执行到的代码是没办法被识别的。 +但是需要注意的是,它只能帮助识别被执行代码路径的风险,那些未被执行到的代码是没办法被识别的。 #### Clippy @@ -427,7 +427,7 @@ extern "C" { ## 总结 -至此,`unsafe` 的五种兵器已介绍完毕,大家是否意犹未尽?我想说的是,就算意犹未尽,也没有其它武器了。 +至此,`unsafe` 的五种兵器已介绍完毕,大家是否意犹未尽?我想说的是,就算意犹未尽,也没有其它兵器了。 就像上一章中所提到的,`unsafe` 只应该用于这五种场景,其它场景,你应该坚决的使用安全的代码,否则就会像 `actix-web` 的前作者一样,被很多人议论,甚至被喷。。。