减少 C 语言中的未定义行为
来源:lwn.net — 2026-09-28
📋 概述
生物医学工程教授 Martin Uecker 在 Kernel Recipes 上谈 C 的未定义行为与内存安全。他梳理 C89 为兼容九比特字节等奇异硬件而采用“抽象机”语义的由来,以及这给编译器实现者留下的巨大自由;并提出内存安全可拆成类型安全、空间内存安全与时间内存安全三部分——前两者已有可观进展,时间安全最难,Rust 在此确有优势。
🔑 核心要点
- C 用抽象机语义定义行为,因此给编译器实现者留下极大自由
- C89 需兼容九比特字节、符号-数值表示等奇异硬件,这塑造了今日的语言
- 内存安全拆为类型安全、空间内存安全、时间内存安全三部分
- 空间安全靠数组边界检查与 counted_by 属性已部分解决
- 时间安全最难,Rust 在那里确有优势,CHERI 等架构也能帮忙
- C23 移除了 K&R 函数定义、三字符组等,C2y 将继续“除魔”
💡 金句
总体而言,C 依然是一门活着的语言,并且仍在不断改进。
👍 0
👎 0
← 返回 Lobsters 首页