Rust 中不安全代码的深入探索
1. 不变量与不安全代码概述
在 Rust 编程里,不变量指的是为使程序正确运行而必须为真的条件。例如,使用 & 和 &mut 的引用不能悬空,它们必须始终指向有效的值。此外,还有特定于应用程序或库的不变量,像“头指针始终位于尾指针之前”或者“容量始终是 2 的幂次方”等。不变量代表了代码正确运行所需的所有假设,但开发者可能并非总能意识到代码所使用的所有不变量,这就可能导致出现 bug。
不安全代码并非是绕过 Rust 各种规则(如借用检查)的手段,而是运用编译器无法实现的推理来强化这些规则。当编写不安全代码时,开发者有责任确保代码的安全性。实际上, unsafe 关键字在 unsafe {} 中允许执行不安全操作时容易产生误导,并非其中的代码不安全,而是在特定上下文中这些操作是安全的,所以允许执行。
2. unsafe 关键字的双重含义
unsafe 关键字在 Rust 中有两个用途:标记特定函数为不安全调用,以及在特定代码块中启用不安全功能。
以下是两个示例:
impl<T> SomeType<T> {
pub unsafe fn decr(&self) {
self.some_usize -= 1;
}
}
此方法标记为
超级会员免费看
订阅专栏 解锁全文
1080

被折叠的 条评论
为什么被折叠?



