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

Mar*_*dik -4 lisp assembly programming-languages

根据这篇文章这个问题的答案,用于阿波罗11号任务的软件,是第一个登陆月球的人,是用大会写的.

我觉得这很令人震惊,因为该项目始于1960年,任务发生在1969年.到目前为止,已有几种高级编程语言可供使用.例如Lisp,这是一种相当高级的语言,即使是垃圾收集,现在仍然在使用.

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

ann*_*neb 11

如果你看一下硬件规格(2 K RAM,36 K硬连线内存),只有手工制作的汇编语言才能有效地完成任何有用的工作.高级语言编译器通常会生成大量多余的代码和低效的内存处理,因为它是通用的.Apollo 11中的软件非常具体,考虑到准备时间,应该可以正确地测试几KB的代码.

  • @MartinDrozdik请注意,Apollo 11任务是在1969年.当时2k RAM是一个相当高的内存量,特别是如果你认为它必须抵抗太空辐射. (5认同)

rcg*_*ldr 7

维基文章:

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

大多数(但不是全部)程序被硬编码为只读核心内存.在计算机中使用所有NOR门的原因之一是它们具有抗辐射性.虽然wiki文章后来提到了RAM和ROM,但RAM实际上意味着读取和写入核心内存,而ROM意味着只读核心内存.

所有登陆月球的阿波罗任务,包括Apollo 11,都使用了AGC的Block II版本,该程序具有36千字(72千字节)的只读核心内存,以及2千字(4096字节)读取和写入核心存储器(其中一些用于程序的某些部分以允许一些在飞行中的变化).

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

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