当前位置:首页 > 智能硬件 > 人工智能AI
[导读] 美国宇航局(NaTIonal AeronauTIcs and Space AdministraTIon,缩写为 NASA)是美国联邦政府的一个独立机构,负责制定、实施美国的民用太空计划、与开展航

美国宇航局(NaTIonal AeronauTIcs and Space AdministraTIon,缩写为 NASA)是美国联邦政府的一个独立机构,负责制定、实施美国的民用太空计划、与开展航空科学暨太空科学的研究。在太空计划之外,美国国家航空航天局还进行长期的民用以及军用航空航天研究。

在普通人的眼中,NASA是一个很“高级”的机构,其成员包含大量不同领域的科学家和研究人员。与其他任何组织机构类似,NASA的日常工作,以及所执行的几乎全部项目也离不开计算机的辅助,出于需求的特殊性和重要性,他们所使用的很多计算机软件都是内部自行开发的,在一些重要项目的关键领域发挥着作用。

去年,一位前NASA实习生把美国阿波罗登月项目的11号计算机 --- 阿波罗导航计算机 (Apollo Guidance Computer) 系统源代码上传到了 GitHub,此举在开发者群体中引起了极大的热议。

此外,NASA官方也已将自己的部分源代码开源到 GitHub,让我们得以管窥这一顶尖科研机构内的聪明大脑们写代码的专业水平。

大型的复杂软件项目通常会遵循一定的代码编写标准和指南。这些指南奠定了软件开发过程中必须遵守的基本原则。

a) 代码的结构如何安排?

b) 应当或不应当使用哪些语言特性?

出于效果的角度考虑,这些原则必须尽可能精简并且必须足够具体,这样才能更好地被人理解并记忆。

本文将介绍由 NASA 喷气推进实验室首席科学家 Gerard J. Holzmann 所提出的,侧重于安全参数的10条代码编写原则。当然,这些原则也适用于其他编程语言。

为 NASA 工作的全球顶尖程序员在编写高度安全的代码时就沿袭了这样的一套指南。实际上,很多组织,包括NASA喷气推进实验室主要会选择使用C语言编写代码。

原因在于这种语言具备完善的工具支持,包括逻辑模型分离器、调试器、静态编译器、强源(Strong source)代码分析器,以及度量工具等。

有时候,编写代码必须遵守一定的原则,尤其是在代码的正确性会对人的生命产生决定性影响的领域,例如飞机、将宇航员送上同步轨道的航天器,以及距离居住地仅几英里远的核电站等设施运行的控制代码。

原则1 – 简化控制流程(Simple Control Flow)

使用尽可能精简的控制流程构造编写程序 —— 不要使用setjmp或longjmp构造、goto语句,以及直接或间接的recursion。

原因:简化控制流程有助于提高代码清晰度,增强代码可验证能力。不使用递归,便不会产生循环的函数调用图,这样也可证明所有本应有界的执行实际上都是有界的。

原则2 – 为循环使用固定次数上限(Fixed Upper Bound for Loops)

所有循环必须有固定次数的上限。我们可以通过验证工具静态地证明,为循环中迭代数量所设立的上限次数未被超越。

如果无法以静态方式对循环的次数界限加以证明,则可认为未遵守该原则。

原因:为循环设置次数界限,避免使用递归,这些做法有助于预防代码失控。然而该原则无法适用于本就不应终止的迭代(例如进程调度器)。此时将沿用该原则的逆向原则:必须能够静态地证明迭代不能终止。

原则3 – 不使用动态内存分配(No Dynamic Memory AllocaTIon)

不要在初始化完成后进行动态内存分配。

原因:诸如malloc等内存分配机制,以及垃圾回收器通常会产生无法预知的行为,进而可能会对性能产生影响。更重要的是,还有可能因为程序员的失误造成内存错误,例如:

试图分配超过可用物理内存数的内存

忘记释放内存

继续使用已被释放的内存

对已分配内存进行越界使用

应强制所有模块位于固定大小、预先分配的存储区域中,借此可避免此类问题,并简化内存使用情况的验证工作。

堆中未分配内存的情况下,动态请求内存的唯一方式是使用栈内存。

原则4 – 不使用冗长的函数(No Large Functions)

任何函数的长度不应超过使用标准参考格式(每个声明最多一行,每个语句最多一行)打印的纸张上一页纸所能容纳的字符数。这意味着函数的代码不应超过60行。

原因:过长的函数通常意味着结构并非最优。每个函数都应是可理解且可验证的单一逻辑单位。如果在计算机显示器上需要多屏界面才能完整显示,这样的逻辑单位通常会极难理解。

原则5 – 低断言密度(Low Assertion Density)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,美国国家航空航天局(NASA)最近公布了其“阿尔忒弥斯”(Artemis)登月计划的最新安排:2024年将宇航员送上月球,分三步走,整个任务将耗资280亿美元,其中160亿美元用于研制登月舱。

关键字: nasa 月球 宇航员

众所周知,美国的“阿尔忒弥斯”计划旨在2024年之前再次将宇航员送上月球,并计划为人类登陆火星做准备。NASA希望利用月球南极的冰提供饮用水,并制造继续航行的火箭燃料。NASA还计划在绕月轨道上建立名为“门户”的中转站。

关键字: nasa 登月

8月23日,据外媒报道,美国航空航天局(NASA)表示,一颗小行星正在朝地球飞来,并有0.41%的几率撞击地球。 报道称,这颗小行星名为2018VP1,预计将于11月2日在地球附近飞过。该小行星两年前

关键字: nasa 小行星 地球

北京时间 8 月 18 日消息,据网站报道,美国航空航天局 (NASA)周日发现一颗与特斯拉汽车大小相仿的近地小行星与地球擦肩而过。这颗小行星被命名为 2020 QG,是有记录以来距离地球最近的一颗持

关键字: nasa 小行星 地球

  据国外媒体报道,3D打印技术正逐渐兴起,不仅可以打印日常器械,也可以打印出各种DIY部件,甚至是各种武器。目前美国宇航局的研究人员已经开发出3D打印的火箭发动机部件,目前涉及该火箭动力系统的

关键字: 3d打印 nasa 火箭发动机 点火测试

  目前明尼苏达大学科学与工程学院正在与明尼阿波利斯的一家无人机公司Sentera LLC进行合作,共同开发一款无人机使用的高精度自动导航仪工具包。明尼苏达大学无人机实验室的主任Brian Ta

关键字: nasa 无人机 sentara

冰盖是覆盖着极厚冰层的广大陆地面积,冰盖的形成、消亡、融水量及其分布范围和成分的变化,直接影响局部地区乃至全球的地质和自然环境变化。 据美国国家航空航天局(NASA)最新公布的图像显示,在寒冷的加拿大

关键字: nasa 冰盖 加拿大

美国司法部又将一名美国大学教授作为目标,逮捕并指控后者在其所在团队为美国航空航天局(NASA)进行研究期间故意隐瞒他与中国学术和商业机构的关系。综合美国消费者新闻与商业频道(CNBC)等媒体报道,当地时间24日,美国司法...

关键字: nasa 美国航空航天局

据国外媒体报道,美国宇航局 (NASA) 的火星探测器 “Mars Atmosphere and Volatile EvolutioN”(简称:MAVEN) 成功捕捉到来自火星的脉冲辉光。巨大的紫外光

关键字: nasa 火星

近日,NASA成功发射了搭载了“毅力号(Perseverance)”和Ingenuity直升机的Mars 2020并由此开启了火星之旅。

关键字: nasa 火星
关闭
关闭