【发布时间】:2017-11-28 04:21:46
【问题描述】:
根据this article 和this question 的回答,用于阿波罗11 号任务的软件是用汇编语言编写的。
我觉得这很令人震惊,因为该项目始于 1960 年,任务发生在 1969 年。此时已经有几种高级编程语言可用。例如 Lisp,它是一种相当高级的语言,即使有垃圾收集,它今天仍在使用。
假设垃圾收集的高级语言减少了编程中人为错误的可能性以及当局的高风险规避,为什么管理人员允许如此巨大的危险? p>
【问题讨论】:
-
然后到 1980 年代,程序集仍然用于日常应用程序,并不是因为它仍然存在,只是不像当时那样普遍。
-
垃圾收集和动态内存管理引入了新问题:内存溢出、无实时响应、GC 和内存管理代码中可能存在的错误、内存碎片、内存开销……
-
GC引入了新问题,这类应用不需要动态内存分配,所以不需要管理堆,也没有内存泄漏的风险。在这方面,使用一些高级语言和 GC 和动态内存分配实际上会使事情变得更复杂、效率更低,并且代码会更大(更多的错误机会)。回到那个单一任务 SW 的时代,编码人员经常手动设计内存使用情况,将变量放在代码之间的最佳位置。不是在 A11 中,但有时甚至会使用令人讨厌的诡计来节省空间(双关语。)
-
早期的 GC Lisp 是一个简单的标记和扫描。人们通常会重新启动他们的 lisp,这样他们就不需要 GC,因为当它启动时,您基本上必须等待它完成。对于太空中的系统,如果系统需要随时响应输入,那么突然离线执行 GC 的系统将无法工作。
-
在 1969 年,如果你想要一个成功的任务,你需要有丰富经验的优秀开发人员。你知道,像 15-20 年或更长时间。在关键任务角色中使用像 Pascal(当时只有两岁)这样的新高级语言就像在今天使用 Rust。没有几十年经验的人会这样做。
标签: assembly lisp programming-languages