为什么阿波罗任务的软件是用汇编而不是高级编程语言编写的?

Why was the software for Apollo missions written in assembly and not in a high level programming language?

根据 this article and answers to this question,第一个人类登上月球的阿波罗 11 号任务使用的软件是用汇编语言编写的

我觉得这很令人震惊,因为该项目始于 1960 年,任务发生于 1969 年。到那时已经有几种高级编程语言可用了。例如 Lisp,它是一种相当高级的语言,即使具有 垃圾收集功能,并且至今仍在使用。

假设垃圾收集高级语言减少了编程中人为错误的可能性以及当局的高风险规避,为什么管理人员允许如此巨大的危险?

如果您查看硬件规格(2 K RAM、36 K 硬连线内存),只有手动编写的汇编语言足够高效,可以做任何有用的事情。高级语言编译器通常会生成大量多余的代码和低效的内存处理,因为它是通用的。 Apollo 11 中的软件非常具体,考虑到准备时间,正确测试几 KB 的代码应该是可行的。

维基文章:

https://en.wikipedia.org/wiki/Apollo_Guidance_Computer

大部分(但不是全部)程序被硬编码到只读核心内存中。在计算机中使用所有或非门的原因之一是它们具有抗辐射性。虽然后面的wiki文章提到了RAM和ROM,但RAM真正的意思是read + write core memory,ROM是read only core memory。

所有登月的阿波罗任务,包括阿波罗 11 号,都使用 Block II 版本的 AGC,它有 36 千字(72 千字节)的程序只读核心内存,和 2 千字(4096 字节)的读 + 写核心内存(其中一些用于程序的某些部分以允许进行一些飞行中的更改)。

回到 OP 的问题,AGC(阿波罗制导计算机)上使用的指令集不是高级语言友好的。这是一个多线程(单核)程序。考虑到代码相对较小,不到 36,000 个指令字,并且多年来对代码所做的更改相对较少,创建和测试某种类型的编译器将花费更长的时间。

早年的 8 位家用电脑和游戏机,几乎所有为这些系统编写的游戏和其他程序都是用汇编编写的,大小通常在 16KB 到 64KB 之间。