第10章 终审:Unsafe、FFI与异步


第 10 章 · 终审:Unsafe、FFI 与异步

本章要回答的三个问题:借用检查器管不到的越权区怎么进入、边界怎么守?Rust 怎么与 C 及裸金属环境互操作?海量并发任务为什么不用海量线程,async 如何做到?

为什么要有这一章

编译期安全不是全知全能:裸指针解引用、外部 C 库调用、硬件寄存器访问,这些场合法官没有证据可依。Rust 的判法是划定越权区——unsafe 块明示"此处责任在人",且范围被块级隔离。终审章把三大进阶辖区各立一案:Unsafe 是越权申明,FFI 与 no_std 是跨境协查,async 是轻量任务调度。

读完能解决什么

  • 读懂 unsafe 块的五种超能力与"安全抽象"的封装责任;
  • 用 extern 声明调 C 函数、理解 CString 与裸指针的边界规则;
  • 解释 async/await 的状态机本质与运行时的分工。

各节怎么分工

节 回答哪个问题 关键产出
10.1 Unsafe 越权区有哪些、如何守边界 五种超能力、安全抽象封装
10.2 FFI 与 no_std 与 C 和裸机怎么互通 extern 声明、no_std 环境要点
10.3 异步编程 少线程跑多任务的原理 async fn、await、运行时分工

先决条件

  • 全书前九章;Unsafe 节需要第 3 章的扎实功底,异步节需要第 8 章线程模型作对照。

往下走到哪

到这里本教程的"庭审"全部结束。下一步是实战:挑一个小工具(解析器、CLI、抓取器)从零做到发布,让所有法条在真实案子里过一遍堂。

本章判例速查

报错/现象 案情 修法方向
E0133 unsafe 能力在 safe 块使用 包 unsafe 块并写明担保
布局错乱 结构体缺 repr(C) 补属性并核对字段序
异步延迟毛刺 任务内阻塞调用 改异步 API 或 spawn_blocking
Pin 相关报错 状态机被移动 Box::pin 固定地址

三个进阶辖区的共同底线

Unsafe、FFI、异步各自新知识不多,共同点是"编译器担保范围收缩,责任向人转移"。Unsafe 把内存安全交还给你;FFI 把语言边界交给你;异步把线程调度交给你。因此本章的学习重点不在语法而在契约书写——每个 unsafe 块的注释、每个 extern 声明的属主约定、每个阻塞点的识别,都是把口头纪律固化成可审查文本。终审庭的判词只有一条:走出安全区的人,必须带着更严的规程回来。

全书收官

十章至此闭环:第 3 章的所有权立宪,第 8 章把宪政扩展到多线程,本章则给出了宪法的修订程序(unsafe)与对外条约(FFI、异步)。回头看第 1 章的三份内存事故卷宗——每一条安全机制都能在某一章找到它的立法现场。建议的收官动作:用 Rust 重写一个你熟悉的百行级小工具,全程记录每次编译报错与解法,这份"个人判例集"比任何教程都更贴合你的思维盲区。

终审交付物

本章的合格交付不是"会写 unsafe",而是三份文档:unsafe 块的担保清单、FFI 边界的属主与布局约定、异步任务的阻塞与取消审计。它们与代码同寿,人换了代仍然可审。至此全书终审闭庭:所有权立宪于第 3 章,宪政扩编于第 8 章,本章交付的是修订程序与对外条约——带着判例集离开法庭的读者,已经具备独立受理 Rust 案件的全部资格。

全书判例总索引

回望十章,最常出庭的判例按频率排座:E0382 移动语义(第 3 章)、E0502/E0499 借用冲突(第 3 章)、entry 改写(第 4 章)、? 与 From 联动(第 6 章)、可见性降级(第 7 章)、Rc 换 Arc(第 8 章)、repr(C)(第 10 章)。这七席覆盖实战报错与改写的大半,值得做成个人速查卡随身。教程至此正式闭庭,往后每一个项目都是新的庭审,而这本断案集给出的方法论始终如一:让报错当入口,让编译器当陪审,让纪律当终审。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U