我与Leslie Lamport合写那篇论文的经历
摘要
作者回忆了与Leslie Lamport合写论文'Types Considered Harmful'的经历,详述了规范语言中类型理论的争议以及合作过程。
暂无内容
查看缓存全文
缓存时间: 2026/08/21 16:27
# 我是如何与Leslie Lamport合著那篇论文的
来源:https://lawrencecpaulson.github.io/2026/08/21/Lamport.html
2026年8月21日
\[`综合` (https://lawrencecpaulson.github.io/tag/general) `类型论` (https://lawrencecpaulson.github.io/tag/type_theory) `集合论` (https://lawrencecpaulson.github.io/tag/set_theory) `回忆录` (https://lawrencecpaulson.github.io/tag/memories)\]
随着年龄增长,人们会变得更智慧,或者至少他们自认为如此。于是他们便有责任将积累的智慧传授给年轻一代。
Leslie Lamport(https://lamport.org/)因在分布式系统与容错领域的成就而成名。对许多人而言,他更著名的身份是LaTeX(https://www.latex-project.org/)的作者——这个著名的宏包让Donald Knuth(https://cs.stanford.edu/~knuth/)传奇的TeX排版系统(https://tug.org/whatis.html)得以被我们普通人所用。随着年岁渐长,Leslie感到必须撰写一系列颇为离奇的论文,标题诸如《如何编写长公式》(https://doi.org/10.1007/BF01211870)。另一篇名为《类型被认为有害》(https://lamport.azurewebsites.net/tla/notes/types.tex.Z),这是对规范语言中类型概念的抨击。其标题呼应了Edsger Dijkstra著名的信件《goto语句被认为有害》(https://doi.org/10.1145/362929.362947)。那封信的标题(由期刊编辑选择)后来被许多反对某些事物的作者借用。Leslie反对类型。但我又是如何卷入其中的呢?
### 类型被认为有害
Leslie的核心论点是:规范语言应基于无类型形式主义(一种集合论),而非有类型形式主义。他提出了几项支持理由:无类型形式主义更灵活;有类型形式主义引发诸多异常问题;规范中的类型错误在验证阶段终将被发现。
这一论点在某种程度上有其道理。1992年该笔记撰写时,类型系统正处于剧变期。Coq(现称Rocq)刚刚出现,Martin-Löf类型理论正经历重大变革。而简单类型理论方面,HOL的早期实现问世仅数年。当时尚不清楚任何类型化演算能实现什么功能。证明助手尚未支持类型类(type classes)。John Harrison距离引入其低成本依赖类型技巧(https://www.cl.cam.ac.uk/~jrh13/papers/hol05.html)还有数年时间——该技巧已足够表达$T^n$形式的类型。
另一方面,Lamport的笔记相当混乱。他似乎对实际的有类型形式主义缺乏了解,将大部分篇幅用于驳斥一些虚构的靶子。因此当该笔记提交至TOPLAS(https://dl.acm.org/journal/toplas)期刊并转交我审稿时,我的裁决是拒绝。另一位审稿人David McAllester也得出了相同结论。这本应就此终结,但编辑Andrew Appel却另有打算。
### "稍微修饰一下"
他说,辩论是有益的。这些观点值得探讨,大意如此。但TOPLAS不能容许技术错误。不如你与Lamport合作成为共同作者,将论文改写为技术准确且保持原意的版本?我表示同意:我对类型系统颇有研究,同时也有自己的无类型集合理论形式主义(Isabelle/ZF,https://rdcu.be/bRiRA)——我正乐于推广它。David最初参与了一段时间,但很快退出了。他很明智。¹
Leslie和我合作了相当长一段时间。这是一种奇特的被动合著关系,但我们设法完成了。新论文既保留了Leslie论点的核心,又对类型运作机制给出了更合理的描述。在此过程中,我见证了Leslie无与伦比的TeX技巧:一些底层操作手法是我此后再未见过的。
### 第二轮审稿,天哪
与此同时,Andrew Appel已卸任TOPLAS编辑。新编辑Carl Gunter并未被告知这篇论文的特殊背景。因此当稿件送达时,他将其送交新的审稿人。这不在原计划内。而新审稿人同样决定拒绝论文。其中一份审稿意见逻辑混乱——显然作者是在情绪极度激动时写成的。于是我联系Carl表示:等等,我的拒稿意见变得一文不值,而这位的意见反而生效了?何况,他简直疯了。最终论文得以发表,附带一段说明文字,表达了期望引发热烈讨论等意愿。我不确定讨论是否真的发生了。
### 回顾
如今我们可以探讨Leslie的论点在27年后站得住脚的程度。公平地说,情况并不乐观。类型系统已显著发展,在众多规范与验证任务中证明了其价值——部分项目已达到工业规模:
- CompCert(https://compcert.org/)经过验证的C编译器
- seL4(https://sel4.systems/):"全球最高可信度与最快速度兼得的操作系统内核"
- 亚马逊的Nitro隔离引擎(https://aws.amazon.com/blogs/compute/aws-nitro-isolation-engine-formally-verifying-the-hypervisor-in-the-aws-nitro-system/)
与此同时,困扰集合理论形式主义的问题却进展甚微。没有类型,就无法实现符号重载——这在原理上很简单(只需使用不同符号即可),但在实践中却至关重要。更糟的是,能书写任何内容的自由本质上是为错误敞开大门。验证是发现此类错误极其昂贵的方式,而未被发现的错误可能让你的证明一文不值。据我所知,即使是Lamport自己的规范语言TLA+,最终实现时(https://github.com/tlaplus/tlaplus)也加入了一些类型限制。
因此,实际上你的规范语言很可能应该是有类型的。但寻找改进集合理论表示法的方式依然值得探索。
---
¹ 原文注释标记保留。
相似文章
★ 后续:《指责模型无法修复工作流程》:论文现已发布为预印本。真正的收获:可组合域、验证棘轮与工具命名。
作者宣布了一份关于构建具备可组合域、验证棘轮及精细工具命名的智能体系统的预印本,分享了实践教训和一个开源的 Common Lisp 实现。
一次一台Lisp机器,创造未来
Larry Masinter和Frank Halasz回顾了他们在Xerox PARC的经历,讲述了Interlisp和NoteCards的开发,以及当前Medley/Interlisp的重生计划,反思了研究文化以及早期计算环境的持久价值。
揭秘类型(及一些悖论的解惑)
类型理论为编程语言基础增加了不必要的复杂性,并提出基于关系成员的更简单观点。
Simon Jones 谈函数式编程、类型思维与无用语言
Simon Peyton Jones 阐述了函数式编程的数学基础、诸如提高可维护性之类的益处,以及其对主流语言的影响,同时讨论了处理副作用等挑战。
HarDBench:面向安全人机协作写作的起草式越狱攻击基准
研究者推出 HarDBench 基准,揭示 LLM 在协作写作中因恶意草稿被越狱的风险,并提出基于偏好优化的防御方法,在不影响协作实用性的前提下显著降低有害输出。