任何事情都是相对的,就像Rust给我们的印象一直是安全、快速,但实际上,完全的安全是不可能实现的。因此,Rust中也是会有不安全的代码的。
严格来讲,Rust语言可以分为**Safe Rust**和**Unsafe Rust**。Unsafe Rust是Safe Rust的超集。在Unsafe Rust中并不会禁用任何的安全检查,Unsafe Rust出现的原因是为了让开发者可以做一些更加底层的操作。这些事情本身也是不安全的,如果仍然要进行Rust的安全检查,那么就无法进行这些操作。
在进行下面这5种操作时,Unsafe Rust不会进行安全检查。
- 解引用原生指针
- 调用unsafe的函数或方法
- 访问或修改可变的静态变量
- 实现unsafe的trait
- 读写联合体中的字段
### 基础语法
Unsafe Rust的关键字是unsafe,它可以用来修饰函数、方法和trait,也可以用来标记代码块。
标准库中也有不少函数是unsafe的。例如String中的`from_utf8_unchecked()`函数。它的定义如下:
``` rust
pub unsafe fn from_utf8_unchecked(bytes: Vec