打开 Hongwei Xi 撰写的在线著作《Introduction to Programming in ATS》(网址路径标识为 INT2PROGINATS),页面元数据标示着 2025 年 6 月 12 日的时间戳,版权页却停留在模糊的 2010-201?。这本教材并非近期问世的新作,而是成型于 2010 年至 2015 年间、面向第二代语言 ATS2(ATS/Postiats)的核心文献;与此同时,第三代实现 ATS3(ATS/Xanadu)已在 2025 年 3 月 29 日 首次完成自举,配套新版教材却尚未问世。
这种文档与代码的脱节,恰好是 ATS(Applied Type System)在系统级编程领域真实处境的缩影。作为一种能与 C 语言无缝交互、不依赖垃圾回收的系统语言,ATS 允许程序员通过带定理证明的编程(PwTP)在编译期静态消除数组越界、空指针解引用和内存泄漏,理论安全上限比今天统治内存安全话语权的 Rust 还要激进,却因为极高的证明门槛和代际更迭带来的生态断层,始终停留在少数学者与极客的视野里。
零开销的数学洁癖:ATS 如何在编译期驯服裸指针
在系统级编程中兼顾 C 语言级别的底层控制力与内存安全,主流工业界与学术界走出了三条截然不同的技术路线。

大众最熟悉的 Rust 选择了工程上的折中。Rust 的所有权移动在类型理论上属于仿射类型(affine types),即变量最多被使用一次,但允许通过 mem::forget 等安全接口直接丢弃所有权而不运行析构函数,这意味着它在语言层面允许安全的内存泄漏;面对数组访问,Rust 常规索引依然依赖运行时的边界检查,越界时触发 panic,而非在编译期从数学上证明下标绝对合法。
另一门融合了依赖类型与线性类型的学院派语言 Idris 2,虽然通过定量类型理论(QTT)将变量使用次数严格划分为 0 次、1 次或无限制,但它的默认 RefC 后端在编译为 C 代码时,底层依然依赖引用计数来管理内存,无法直接等同于 C 语言级别的手动内存布局控制。
唯有 ATS 选择了最贴近硬件底层的硬核路径。在《Introduction to Programming in ATS》第三与第四部分中,Hongwei Xi 展示了如何用线性视图(views)与视图类型(viewtypes)把依赖类型和线性逻辑拧成一股绳:系统用 T @ L 这种状态视图,精确表达内存地址 L 处存放着一个类型为 T 的值。
程序员每一次解引用裸指针、读写矩阵下标或释放堆内存,都必须在代码中构造出对应的证明函数(proof functions);如果一块动态分配的内存没有被释放,或者指针算术超出了数组边界,类型检查器就会在编译期直接拒绝通过。更关键的是,所有用于定理证明的逻辑代码在编译通过后会被彻底擦除,最终生成的机器码与手写 C 语言一样紧凑,不带任何垃圾回收或运行时检查包袱。
Rust 把裸指针关进 unsafe 的笼子,ATS 却逼着程序员给每一根裸指针写下数学出生证明。
为了支撑这种极致的混合编程,Hongwei Xi 在 2013 年 12 月 24 日大幅扩充了书中与 C 语言交互的章节,允许开发者直接引入外部 C 头文件、导出 ATS 类型供 C 调用,甚至围绕现有的不安全 C 接口渐进式地包裹一层静态证明。
- 结论.对于操作系统内核或高可靠嵌入式架构师而言,ATS 证明了在不牺牲哪怕一个字节内存布局控制权的前提下,纯靠静态类型系统就能彻底封印 C 语言级别的裸指针隐患。
十年教材与三代重写:为什么统治系统编程的不是它
既然 ATS 早在十多年前就跑通了零开销的形式化验证,还能直接复用 C 语言生态,为什么今天进入 Linux 内核、成为工业界内存安全标杆的是 Rust,而不是 ATS?

第一个障碍在于极度陡峭的心智负担与孱弱的工程人体工学。Rust 的聪明之处在于把内存安全简化为一套编译器内置的固定生命周期与借用规则,程序员只要遵守规则就能获得安全保证;而 ATS 把定理证明的责任交还给了程序员。在 Hacker News 社区 2020 年至 2023 年的多轮技术讨论中,同时涉足过 ATS、Idris 和 Rust 的开发者普遍反馈,ATS 的语法极其繁杂,编译器吐出的类型与约束求解报错晦涩难懂,为了写一个安全的红黑树或快速排序,往往要写下比业务逻辑本身还要冗长的证明代码。
第二个更致命的软肋,是学院派项目常见的推倒重写循环。梳理《Introduction to Programming in ATS》的版本轨迹就能看清这种断层:该书最早的 0.0.1 版本始于 2010 年(对应路径 INTPROGINATS),服务于第一代 ATS1;随后迁移至目前的 INT2PROGINATS 路径以教授第二代 ATS2,并在 2015 年 1 月至 3 月间密集补入了锁、线性通道以及从泛型到晚绑定等章节,于 2015 年 10 月 29 日定型了 PDF 版本。
正如早期深入使用过该语言的开发者 doublec 在 2023 年 9 月 4 日的评论中所指出的,ATS 每隔几年就会因为研究方向调整而重新实现一版编译器。从 ATS1 到 ATS2,再到 2025 年 3 月 29 日刚刚实现自举的 ATS3,每一次底层的推倒重来都让本就稀缺的第三方库、构建工具和社区教程面临断代清零。工业界企业不敢把核心基础设施押注在一门连主干版本和配套教材都无法保持向下兼容的语言上。
- 提醒.对于当下因为网页更新时间戳而慕名点开《Introduction to Programming in ATS》的开发者,切勿直接将其作为现代生产工具引入团队;它目前最大的价值是作为理解线性类型与底层指针验证的理论范本。
眼下真正的变量落在了刚刚完成自举的 ATS3(ATS/Xanadu) 身上。如果 Hongwei Xi 团队能在 ATS3 阶段补齐直观的编译器报错、现代包管理器以及配套的完整教材,这把锋利的数学手术刀或许还能在极高安全等级的微内核与嵌入式验证领域找到一席之地;若依旧延续重理论轻工程的旧习,它就只能继续作为编程语言演化史上的一座孤峰,目送妥协者拿走整个工业世界。
