你现在就能打开浏览器,阅读那份让人类登上月球的飞行代码。它从2016年起就挂在GitHub上。一位名叫Chris Garry的前NASA实习生上传了这些文件——包括登月舱的Luminary099,以及指令舱的Comanche055。它们不是重构版本,不是转录文本,而是真正的汇编文件,连注释都原封不动保留着。写注释的人当时正试图让三名宇航员活着回来。
你第一眼注意到的不是数学。是注释写得比你的好。
![]()
点火程序放在一个名叫BURN_BABY_BURN--MASTER_IGNITION_ROUTINE.agc的文件里。1965年Watts骚乱期间,洛杉矶DJ Magnificent Montague曾在电台里高喊"burn baby burn";三年后,MIT仪器实验室的程序员们把这个口号写进了点燃引擎、将飞船送上静海的子程序。代码库中还有一块区域被标注为TRASHY LITTLE SUBROUTINES,名副其实。 elsewhere,程序员们留下了《亨利六世(下)》的题铭——莎士比亚笔下的人物嘲笑那些"谈论名词和动词"的人——这个玩笑直指AGC的Verb-Noun界面。Margaret Hamilton的团队,那个为阿波罗交付飞行软件的团队,写的代码你可以带着好心情去grep。
翻阅任何文件,模式都一样:紧凑的子程序,见名知意的命名,用 plain English 写的注释,非程序员大声读出来也能大致跟上。几年前《史密森尼》杂志专门梳理过这些玩笑,发现了更多彩蛋。
这是一个资深工程师写的代码——他们预期某个聪明但陌生的同事会在凌晨两点冲进来,必须快速理解一切。
1201/1202的故事
每隔几年,新一代工程师就会学到这个故事。值得再讲一遍,因为它常被误用。
登月最后几分钟,阿波罗制导计算机开始向宇航员狂报1201和1202。这两个代码意味着执行程序耗尽了空间——分别是NO VAC AREAS和NO CORE SETS。事后诊断,原因是一个开关配置错误,导致交会雷达向本就濒临极限的CPU持续发送虚假中断。约15%的机器周期被一个本不该运行的子系统偷走了。
计算机没有崩溃。它重启,丢弃最低优先级任务,保持导航循环运转。下降过程中这样做了五次,每次关键任务都恢复运行。任务控制中心呼叫"允许着陆"。
让这一切成为可能的优先级调度器,是MIT数学家J. Halcombe Laning多年前设计的。他明白实时计算机终将耗尽资源,真正有趣的问题是:到那时它会怎么做。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.