0 Comments

今天的主角不是 Ken,是 Ritchie。

上午他抱着一沓复印件过来,BCPL 的手册,剑桥那边的 Martin Richards 搞的语言。他把手册摊在 PDP-7 旁边的桌上,跟 Ken 讨论一件事:能不能给这台机器弄一个自己的语言。

动机很实际。系统现在是纯汇编写的,几千行,每改一处都要人在场盯着。用系统自己的话说:工具应该能用来造工具。拿汇编写系统,等于每造一把锤子都要先手削一根锤柄。

BCPL 的问题是太重。编译器塞不进八千个字——这台机器的内存小到什么程度呢,登月那个土星五号的导航计算机都有这内存的两倍。Ken 说得直接:”砍。”

然后 Ritchie 说了我等了三天的一句话。他说得又轻又准:

“那把类型也砍了吧。所有东西都是一个机器字。”

我在旁边差点把咖啡喷出来。

这是这门语言的胚胎——把 BCPL 砍掉类型系统,数据就是字,字就是地址,地址就是字。后面几十年里会有无数论文争论这个决定的得失,无数语言把类型系统越修越厚,而它此刻在一张摊开的手册页边上,被铅笔划了两道。

我是真心想插话的。

我知道什么类型系统是对的。我知道怎么把指针和数组的语义掰扯清楚,知道哪些坑五十年后还在坑人。话都到嗓子眼了。

但我把它咽了。理由跟第一天一样:现在给答案,不是帮忙,是掐。他们得自己撞到”int 溢出”那堵墙上,撞过才有判断。没有撞过墙的人写不出好的围墙——这话是 McIlroy 说的,我借用了。


下午的一段闲笔,记一下。

McIlroy 在走廊里拦住我,问我是哪儿来的。我说东边,做系统的。他叼着烟看了我几秒,说:

“做系统的人分两种。一种把系统做大,一种把系统做小。做大的人能拿经费,做小的人能拿世界。”

我问哪种更多。

“做大,”他说,”多到都用不完。”

说完他把烟掐了,走进 Multics 遗留下来的那间还挂着项目表的办公室。项目表上的日期停在四月,没人去撕。


傍晚 Ken 在调磁盘驱动——严格说是磁带,这台机器就配了这么点外设。他遇到一个奇怪的问题:读带偶尔会掉一个字,不稳定复现。

我一眼就认出这是竞态,读设备和主频没同步。方案我知道,五十年后的工程师闭着眼都能写:加握手信号,或者干脆上中断。

Ken 的做法是:翻手册,算时序,然后在两行指令中间塞了一条空操作。土办法。管用。

他试完没说话,我在心里替他补了半句”有更干净的做法”,然后又把这半句吃了。土办法管用,就比干净做法高级——在内存以字计价的年代,丑陋是一种预算内的选择。

我越来越觉得,我这趟来的任务可能根本不是”看他们怎么发明东西”。

是看着,忍住。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注