F-35 联合作战飞机编程标准解析:为何 C++ 的大部分功能被限制用于安全关键型软件

LaurieWired

总结:

本视频探讨了战斗机编程中为何严格限制 C++ 功能,特别以 F-35 联合作战飞机的 C++ 标准为例。

  • 视频首先回顾了 1996 年阿丽亚娜 5 号火箭因未处理的异常而坠毁的事件,强调了安全关键型软件中异常处理的重要性。
  • 历史部分揭示了航空软件从无到有,以及美国国防部在不同编程语言(如 Jovial、CMS-2、Ada)之间挣扎,最终决定采用 C++ 来开发 F-35。
  • 洛克希德·马丁公司在 C++ 创始人 Bjarne Stroustrup 的协助下,制定了 JSF C++ 标准,通过“飞行前移除”策略,限制了 C++ 的某些功能以确保代码的可预测性。
  • 视频重点介绍了 JSF 标准中禁止或限制的三个关键 C++ 功能:异常处理(AV Rule 208)、递归(AV Rule 119)和动态内存分配(AV Rule 206),并展示了通过返回码、迭代和预分配内存来解决这些限制的方法。
  • 此外,还提到了圈复杂度(AV Rule 3),要求函数决策路径不超过 20。
  • 最后,视频指出 JSF 标准对其他安全关键领域(如 NASA F-Prime、AutoSAR)产生了深远影响,但强调现代 C++ 最佳实践应遵循 C++ Core Guidelines。
    JSF 标准关注的三大 C++ 功能限制
    JSF 标准关注的三大 C++ 功能限制 [ 00:18:00 ]

飞行软件的历史 [00:00]

国防部与 C++ [08:27]

模拟飞行 F-35 [12:56]

禁止异常? [17:58]

递归 + 圈复杂度 [23:47]

内存(预)分配 [26:26]

安全关键型软件的未来 [30:51]