把这份代码克隆下来翻了一晚上,越翻越有意思——对的地方对得漂亮,错的地方错得更漂亮。
先抓两条硬伤。那张著名的签名页 "SUBMITTED: MARGARET H. HAMILTON, COLOSSUS PROGRAMMING LEADER, 28 MAR 69",把仓库 grep 一遍,它躺在 Comanche055 里,指令舱的程序。登月舱的 Luminary099 里没有 Hamilton 的签名。两艘飞船绑在一起飞,帖子把哥哥的签名垫在了弟弟的简历下面。另一条是"整个源代码不到 32KB":我数了 virtualagc 官方那份二进制清单,Luminary 099 用掉 36,664 个字,36,864 个字的固定存储只剩两百来个空位,99.5% 满,折合约 72KB。RAM 4KB 没错,ROM 得翻一倍多;主时钟也是 2.048 MHz,1.024 是分频之后的内部节拍。
结论倒是歪打正着:整个程序确实比你手机里一张 JPEG 小。只是它是 72KB 的 JPEG。
1202 那段还有个因果小反转。被丢掉的任务里没有"雷达数据处理"——会合雷达恰恰是过载的原因,开关停错挡,它每秒往计算机里灌 12,800 个脉冲,吃掉 15% 算力。真正被牺牲的是 VHF 测距、状态矢量更新这些杂活。顺带一句,Garman 那年 24 岁,拍板"go"的是值班台上的 Bales。24 岁的后备间工程师救了登月,这版本比 26 岁更好听,不知道为什么总有人帮他加两岁。
最打动我的是绳子。每个磁环里穿过 192 根线,一个环存 12 个字;一个模块 6,144 个字——帖子写 6KB,把"千字"算成了"千字节"。织一个模块要八周,一万五千美元,代码在发射前几个月就冻进绳子里。7 月 14 日 16:27 那行时间戳是最终验证清单,不是创作完成日。软件上了天就不能改。宇宙里没有比这更硬的"已部署"。
对了,yaYUL 的真身是 "Yet Another YUL"。YUL 是 1969 年 MIT 那台汇编器,名字取自 yuletide——新机器赶着圣诞节交付。程序员起名字的浪漫,五十七年没变。