导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

2019年7月20日,是一个为期三天的纪念日。 并不是因为广大网友帮助周杰伦登上了新浪微博第一,而是今天是阿波罗登月50周年纪念日。 早在几年前,阿波罗飞船使用的源代码(实际上是编译好的)就在Github上发布了,但是我不明白为什么这几天有中国同学给这个github问题泼水……,这样的人类历史上的伟大事件,何不借此机会了解一下呢? 下面是一些关于阿波罗登月和程序员的小故事。 通过这些事情,你可以利用你的假期和精力变得更有价值。

首先我想说一下Apollo11​​导航的源码。 这段代码的设计负责人是玛格丽特·希菲尔德·汉密尔顿(Margaret Heafield Hamilton),一位主修物理和哲学的女程序员。 1960 年,她在麻省理工学院获得了一个临时软件开发职位。 PDP-1和LGP-30上负责运行天气预报的软件(注:在计算机历史上,PDP系统机器被称为Hack文化的重要推动者,PDP-11推动了Unix操作系统,而Unix操作系统是黑客文化的重要产物(参见《Unix传奇》)。 之后,她为日本海军编写了探测敌人飞行的软件。 1965年,她加入麻省理工学院仪器实验室,并成为该实验室的主任。 这个实验实际上是阿波罗计划。 她部分负责为地球着陆编写新的导航软件,以及为其他项目编写该软件的更高版本。

上图是汉密尔顿站在她和麻省理工学院团队为阿波罗项目制作的导航软件源代码对面,即Github上的开源代码——Apollo-11(2016年开源)。 我们可以看到有两个重要的目录,一个叫“Comanche055”,另一个叫“Luminary099”。 后者用于命令模块(英文CommandModule),前者用于登月舱(英文LunarModule)。 这里需要说明的是,指挥舱将着陆舱推向地球。 返回时,着陆舱被丢弃,返回月球的是指挥舱。 如果您想查看这两个源代码的硬拷贝,可以访问这两个链接:Comanche55AGCProgramListing 和 Luminary99REv.1AGCProgramListing。 其中,55和90是各自的构建版本号。

导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

让我们仔细看看。 这类文件的日期是1969年7月14日,阿波罗11号登月的日期是1969年7月16日。 代码写好后,三天就投入生产,然后去月球,或者导航代码,代码写得有多健壮。

如果你仔细比较这两个目录下的文件,你会发现有些文件是相同的,不仅文件名相同,而且内容也相同。 这表明这两个模块中的某些东西是相似的。

这种代码应该很难读懂,因为写这些代码的时候C语言还没有发明,所以基本上都是汇编代码,而且还可以发现,这种代码的源文件都是基于agc后缀,看来这不是我们平时认识的程序集,所谓的AGC代表的是运行那些代码的计算机——ApolloGuideanceComputer。 通过此维基百科链接,您可以听到 AGC 笔记本的说明。 阅读这些说明后,您可以理解源代码。 其实既然是编译写的,读起来还是费点功夫的。 然而,其中一个文件是 LUNAR_LANDING_GUIDANCE_EQUATIONS.agc 您想查看一下吗?

导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

打开源文件,还可以看到每个文件都有很多注释,非常友好,有的注释还比较有趣。 这里有一组短视频带你读懂那些代码——探索阿波罗制导计算机(AGC)代码,有10个小视频,每个2分钟左右,如果你英文听得好的话(我觉得很容易看懂)了解),你可以看一下,了解AGC是如何工作的,非常有趣。

当时的AGC重32公斤,显存只有2MHz、2K RAM、36K ROM。 嗯,就是这么一个小玩意,把人送到了地球。 明天,一个聊天程序将占用几GB的显存……

下面是AGC在Apollo1命令模块中的样子(图片取自里面的视频),这个高质量的3D扫描来自Smithsonian3D:Apollo11​​CommandModule(我觉得日本人做这种事很漂亮,这些高清3D扫描太棒了,仔细看的话,这个舱内的舱壁上有宇航员的字迹)

导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

该AGC的操作界面也称为DSKY——Display and Keyboard的缩写。 右图是一个AGC模拟器,其官方主页在Github/VirtualAGC。 在该界面中我们可以看到:底部按钮左侧有两个按键,一个是副词Verb,一个是名词Noun,Verb指定操作类型,Noun指定操作要改变的数据。动词命令。 左侧显示屏下方有 3 个 5 位数字。 这三个值显示了代表航天器姿态的矢量,以及期望速率变化的显示矢量。 是的,原来的导航就是靠这三个数字和上面的程序。

如果你想了解更多关于AGC的细节,可以看看这篇文章AGCforDummies。 本文介绍了嵌入式系统AGC的背景和操作说明。 详细的AGC汇编语言指南可以让您了解更多细节。

另外,我在Youtube上发现了一部关于当时Apollo笔记本的纪录片——NavigationComputer,太有趣了。 例如:第21分51秒,我们开始讲用于存储的RopeMemory缠绕显存。 汉密尔顿还下去谈论这些显存上的编程。 梭子,就像印花一样,绣出来的不是图案,而是程序……太硬核了,程序真的是用“硬织”的形式写的。

导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

看完之前的纪录片,我非常惊讶,惊叹于50年前的工程能力,更佩服50年前那些人面对技术时的一丝不苟、尊重技术和严谨的精神和技艺。 不会比明天更糟糕。

然而,最奇妙的还不是这个。 我在汉密尔顿的维基百科条目中发现了他所说的一个风暴——阿波罗登录雷达开关放置在错误的位置,导致AGC接收到很多错误的信号。 结果是 AGC 必须执行着陆所需的估计,但也接受占用其 15% 时间的额外数据。 而且AGC程序实际上可以用高优先级任务打断低优先级任务导航游戏直播系统源码,因此AGC手动淘汰低级任务来保证重要任务的完成。 汉密尔顿原本表示——如果当时的程序无法识别错误并从错误中恢复,我怀疑阿波罗能否成功登陆月球。 如果计算机没有识别出这个问题并采取恢复行动,我怀疑阿波罗 11 号是否会成功登月。

看到这里,你是否感觉到——“女程序员的一小步导航游戏直播系统源码,人类的一大步”?

导航游戏直播系统源码-50年前的登月计划和程序员有多硬核

汉密尔顿除了厉害之外,她还是第一个提出“软件工程”的人。 在麻省理工学院,她希望软件开发与其他项目具有相同的工程学科,并给予相关的尊重,因此她创造了软件工程这个术语。 2018 年,IEEE 纪念软件工程 50 岁生日时,他们邀请 Hamilton 来谈论一个名为 What the Errors Tell Us 的话题。 她绝对可以称为程序员的先驱。

五年前,当 Apollo 的源代码开源时,Twitter 上一位名叫 LinClark 的人发推文:“我母亲 50 年前的代码被放到了 Github 上”,虽然她不是 Hamilton 的孩子,但她的母亲也是 Apollo 的程序员之一,而现在LinClark也是一名程序员,目前就职于Mozilla,StaffEngineer,专攻WebAssembly、Rust、JavaScript,也是一个非常强大的程序,同时也是一个在Youtube上有各种讲座的老头。 一个和他父亲一样优秀的人。

不知道当她在推特上如此自豪地发布这样的推文时,你们怎么想? 你希望你的子孙以后也能如此骄傲地发微博吗?

最后我想对那些在阿波罗源代码问题上发垃圾短信的人说一句,看看别人,再看看自己,你想让你的儿子纪念登月100岁生日吗? 侯说——50年前,我父亲是个傻子,在Apollo的github问题列表里写了一些垃圾,还以为自己很聪明? !

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 导航游戏直播系统源码-50年前的登月计划和程序员有多硬核 https://www.wkzy.net/game/146906.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务