来自 Types and Programming Languages § 1.2 What Type Systems Are Good For
A safe language is one that protects its own abstractions.
A safe language is completely defined by its programmer’s manual.
完备的抽象意味着使用者可以完全信赖语言设计,只关心高级语言这一抽象层,而无需关心硬件层的具体实现.
高级语言提供对物理设备的抽象,比如,数组是对于内存的抽象,程序员对于数组的预期是:数组只能通过显式的更新操作(如 arr[1] = 1024
)修改,“修改了某个变量,某个数组中的若干元素也莫名其妙地改变了”(e.g. 缓冲区溢出攻击)是抽象被破坏的一种表现,这意味着程序员必须对变量(高级语言提供的抽象)在内存(真实存在的物理设备)中的布局有详细了解,才能写出符合预期的程序.
想起了 CSAPP 的一系列实验,因为 CSAPP 的目标是从程序员的角度考察计算机系统,即从软件视角看硬件,如果使用的编程语言是安全的,那么我们可以完全相信它提供的抽象,那么我们就不能透过软件看到硬件,如果 c 是安全的,那么 CSAPP 的实验就没法做了🧐