查看原文
其他

Rust 生态蜜蜂|Unsafe Rust 系列 Part 1 : 概念基石-安全性和有效性不变量

张汉东 觉学社 2022-09-09
前言
因觉学,求绝学。Rust 生态蜜蜂,是觉学社公众号开启的一个付费专栏。生态蜜蜂,顾名思义,是从 Rust 生态的中,汲取养分,供我们成长。计划从2022年7月第二周开始,到2022年12月最后一周结束。预计至少二十篇周刊,外加一篇Rust年度报告总结抢读版。本专栏可以在公众号菜单「生态蜜蜂」中直接进入。海外用户可以去 https://rustbee.zhubai.love/ 订阅。

Unsafe Rust 系列文章是对 Unsafe Rust 的系统性探索。本文为第一篇。

安全性不变量和有效性不变量是 Rust 安全抽象的基石,我们每一个 Rust 开发者,即便你不会接触 Unsafe Rust ,也都应该了解这些基础概念。

引子

在学习 Ferrocene Rust 语言规范[1] 的 类型和 trait 部分,谈到函数指针的时候说“函数指针类型的有效性不变量是它不能为空”,但是我认为这句话应该是“函数指针类型的安全性不变量是它不能为空”。我给 Ferrocene Rust 语言规范仓库提交了 PR [2]对此进行修改,然而遇到了反驳,对方认为“有效性不变量”是正确的。到底哪种正确,让我们通过这篇文章来探索一下,欢迎读者朋友参与讨论。

本文参考 Ralfj 的文章「两类不变量」[3]来梳理这两个概念,并且拿 Rust for linux 中真实代码案例进一步学习,最后解决上述学习 Ferrocene Rust 语言规范中遇到的问题。

安全性不变量

安全性不变量:确保安全代码无论做什么都可以安全地进行,即,在对相关数据操作时不能引起未定义行为。也就是说,在 Safe Rust 代码中每一个类型 T 下的数据都是安全的,这些数据满足安全性不变量。

比如,当你写一个函数 fn foo(x:bool) 时,你可以假设 x 是安全的,它要么是 true,要么是false,不会出现第三个值。同时也意味着对 x:bool 的任何安全操作都是安全的,不会碰到未定义行为(UB)。

再看看更多的类型。

购买合集后可阅读剩余86%
#Rust生态蜜蜂
  • 1. Rust 生态蜜蜂|2022-7-24
  • 2. Rust 生态蜜蜂|2022-7-31
  • 3. Rust 生态蜜蜂|2022-08-01
购买合集后可阅读剩余86%

#Rust生态蜜蜂

微信扫一扫付费阅读本文

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存