Lisp 之根
原文:The Roots of Lisp
作者:Paul Graham 发表:2001-05
译者:Claude(baoyu-translate)
2001 年 5 月
(我写这篇文章是为了帮自己精确地理解 McCarthy(John McCarthy,Lisp 之父)发现了什么。要用 Lisp 编程,你不必懂这些;但任何想理解 Lisp 之本质的人——既包括它的起源,也包括它的语义内核——读它都会有帮助。Lisp 之所以拥有这样一个内核,是它和别的语言不同的特征之一,也是它**和别的语言不同地拥有“方言“**的原因。)
1960 年,John McCarthy 发表了一篇了不起的论文——他对编程所做的事,约略相当于欧几里得对几何所做的事。他展示了:给定一小撮简单算子和一套函数的记号系统,你就能搭出一整门编程语言。他把这门语言叫做 Lisp——取自 “List Processing”(列表处理,Lisp = LISt Processing)——因为他的关键想法之一,是用一种叫“列表“的简单数据结构,同时承载代码和数据。
值得理解 McCarthy 的发现——不仅因为它是计算机历史上的一个里程碑,也因为它是“编程在我们这个时代正逐步演变成什么样“的一个模型。在我看来,迄今为止真正干净、自洽的编程模型只有两种:C 模型和 Lisp 模型。两者像两块高地,之间是沼泽低地。随着电脑越来越强,新开发的语言一直在朝 Lisp 模型那一边稳步移动。过去 20 年里造新语言的一份流行配方是:拿 C 的计算模型作底,再零零碎碎地从 Lisp 模型里取一些部件加进去——比如运行时类型、垃圾回收。
本文里我会试图用尽可能简单的话讲清楚 McCarthy 发现了什么。重点不只是去了解一个 40 年前某人想出来的有趣理论结果——而是要指出语言正在去往哪里。Lisp 不寻常的地方——事实上是 Lisp 的定义性特质——是它能用它自己写出来。要理解 McCarthy 这话的意思,我们将重走他的步伐——把他的数学记号翻译成能跑的 Common Lisp 代码。
(完整正文以 PostScript 文件形式提供:https://paulgraham.com/rootsoflisp.ps)