obsolescence.dev 最近发了一篇 PDP-1 Lisp 入门笔记。

它讲的不是现代意义上的 Lisp 教程,而是怎么在 PDP-1 上启动 Lisp、输入表达式、加载纸带、保存函数。作者也说得很清楚:这还是一份 quick-start/WIP 笔记,不是完整手册。

有意思的地方在这里:1960 年的 Lisp,已经能用一种很早期的 REPL 方式工作。

John McCarthy 1958 年在 MIT 提出 Lisp。两年后,14 岁的 Peter Deutsch 在 PDP-1 上实现了一个极简版本。受限于内存、纸带输入输出和机器操作方式,它远谈不上完整。但它让 Lisp 从理论和批处理流程里,走到了可以输入、求值、回显、再输入的现场。

这才是这篇笔记值得看的原因。

PDP-1 Lisp 的位置:关键不在功能多,而在反馈快

PDP-1 Lisp 常被描述为最早的交互式编程环境之一。

这个说法要有边界。它不能被说成现代 IDE 的直接起源,也不能拿今天的编辑器、调试器、包管理器去套。更准确的说法是:它早早实践了 REPL 这种工作循环。

读入,求值,打印,再等待下一次输入。

今天看很普通。当时并不普通。很多编程工作更接近准备输入、提交运行、等待结果。PDP-1 Lisp 把反馈周期压短了,程序员可以边试边改。

对照对象典型使用方式真正差别
IBM 7090 上的 Lisp 1.5更接近大型机和批处理流程运行周期更重,交互感弱
PDP-1 Lisp前面板、纸带、打字机混合操作能输入表达式并立即看到求值结果
现代 REPL键盘、屏幕、文件系统和编辑器联动交互成本低,硬件约束被隐藏

PDP-1 Lisp 的先进,不是语言能力多强。

它更像是在一台很小、很受限的机器上,提前做出了一个后来程序员会习以为常的动作:直接和程序对话。

这也解释了为什么今天的程序员读它,不该只盯语法。它提醒我们,交互式编程不是自然长出来的。它需要机器、输入设备、系统设计一起让路。

实际怎么跑:纸带、开关、八进制都不能省略

这篇笔记最有价值的部分,是那些看起来麻烦的操作细节。

启动 Lisp 不是双击图标。要设置 Extend switch,挂载 lisp.rim 纸带,然后按 READ IN。接着用 TW 开关设置上限地址 7750、下推表长度 400,再打开 Sense Switch 5,让输入来自打字机。

进入 Lisp 后,还要把地址开关指向 0004。出错或停机时,常见动作是按 STARTCONTINUE 回到 Lisp。

连输入结束也不是今天的回车习惯。这里是一行以空格结束。想确认系统还活着,可以输入 nil。如果 Lisp 正常,它会在新行再打印一个 nil

八进制语境也很关键。

(plus 4 4) 输出 10(times 4 4) 输出 20。这不是算错了,而是结果按八进制显示。把它改写成十进制例子,反而会把这套环境讲歪。

纸带也不能被轻描淡写地说成文件。

在这套系统里,纸带既用于加载函数,也用于保存函数定义。笔记里的例子是先从 lisp-defs.pt 载入 zeroppdefcount。要保存自定义函数时,需要打开 Sense Switch 3,把输出送到打孔机,再用 (pdef tt) 把定义打到纸带上。

这个过程慢,笨,带着硬件声响。

但正是这些动作,让人看到早期软件和机器之间的距离有多短。程序不是飘在屏幕上的文本,它要经过纸带、开关、打字机和八进制地址。

谁该看:复古玩家验证现场,程序员校准直觉

这篇笔记最适合两类人。

一类是计算机史和复古计算爱好者。对他们来说,它不是一篇故事稿,而是一份可操作的核对表。真正该做的,是拿 PDP-1 手册、纸带镜像、PiDP-1 等复刻环境去交叉验证:READ IN 能不能跑通,lisp-defs.pt 能不能加载,pdef 打出的纸带能不能再读回。

另一类是关心 Lisp 和 REPL 起源的程序员。对他们来说,这篇笔记的作用不是迁移工具,也不是学习新语法。更现实的动作是把它当成一次历史校准:今天一个 REPL 为什么要有低延迟反馈、可恢复错误、可保存定义、可重复加载,很多答案在这种极小系统里已经露头。

读者该怎么用这篇笔记不该期待什么
复古计算爱好者按步骤验证纸带、开关、地址和八进制输出不要把它当成完整 PDP-1 Lisp 手册
Lisp/REPL 程序员对照现代 REPL,理解交互模型的早期形态不要把它当成现代 Lisp 入门课

这里还有一个限制要说清。

PDP-1 版本非常极简,受内存和纸带 I/O 约束。它和 Lisp 1.5 的关系,不能简单理解成小号完整版。更稳妥的看法是:它借用了当时 Lisp 的思想和资料,在 PDP-1 这种机器上做出了一套能交互运行的极小实现。

所以,接下来最该观察的不是这篇笔记会不会写成大教程。

更重要的是几件具体事:相关纸带镜像能否持续校验,PDP-1 Lisp manual 和 IBM 7090 Lisp 1.5 Programmer’s Manual 能否互相对上,PiDP-1 这类复刻环境能否稳定复现加载、求值、保存、再读取这一整条链路。

计算机史怕的不是旧。

怕的是只剩叙述,不能运行,不能出错,也不能被修正。PDP-1 Lisp 的价值,正好在相反方向:它把一个历史判断重新放回机器动作里。