Hacker News 中文摘要

RSS订阅

F-35战斗机采用的C++标准[视频] -- The C++ standard for the F-35 Fighter Jet [video]

文章摘要

战斗机禁用90%的C++功能是为了确保系统安全性和可靠性,避免复杂特性带来的潜在风险,如内存泄漏和不可预测行为。严格的编码规范只允许使用经过验证的简单功能,以保障关键任务系统的稳定运行。

文章总结

为什么战斗机禁用90%的C++功能

视频概述
LaurieWired的这期视频探讨了战斗机(如F-35)为何严格限制C++语言功能的使用。视频指出,一个未处理的异常就曾导致价值5亿美元的火箭在几秒内损毁,因此F-35的工程师制定了史上最严格的编码标准之一。视频内容包括飞行软件的历史、五角大楼对C++的采用,以及F-35的C++编码标准。

主要内容
1. 飞行软件的历史
- 早期飞行控制系统的演变及软件在航空中的关键作用。

  1. 五角大楼与C++

    • 五角大楼曾面临数千种编程语言的混乱局面,最终选择C++,但对其功能进行了严格限制。
  2. F-35的C++标准

    • 禁用异常处理:未处理的异常可能导致灾难性后果。
    • 限制递归和循环复杂度:确保代码可预测性和稳定性。
    • 内存预分配:避免运行时动态内存分配带来的不确定性。
  3. 安全关键软件的未来

    • 探讨如何在保证安全性的同时利用现代编程语言的优点。

观众评论亮点
- 有观众提到,早期游戏开发(如《小龙斯派罗》)也采用了类似的严格编码规则。
- 另一位观众分享了阿丽亚娜5号火箭事故的细节,指出异常处理不当是导致失败的原因之一。
- 还有人调侃:“如果战斗机用JavaScript,可能需要额外引擎来支持CPU运行。”

资源链接
- F-35 C++编码标准
- 示例代码GitHub仓库

视频全长约30分钟,分为多个章节,适合对航空软件或编程安全感兴趣的观众。

评论总结

以下是评论内容的总结:

  1. 航空电子编码规范的限制性

    • 严格禁止异常、递归和动态内存分配,以确保确定性和可预测性。
    • 引用:"no exceptions, no recursion, no malloc()/free() in the inner-loop"
    • 引用:"The '90% ban' isn’t about hating C++ — it’s about guaranteeing determinism."
  2. C++在航空电子中的使用

    • F-35等航空器使用高度受限的C++子集,禁用STL等特性。
    • 引用:"the F-35 (née Joint Strike Fighter) C++ coding standards can be found here, all 142 pages of it"
    • 引用:"Using the stack or the heap means your variables aren’t always at the same memory address."
  3. 与其他领域的对比

    • 高频交易等领域可能有类似的可靠性和性能要求。
    • 引用:"It seems like they’d have similar speed/reliability/predictability requirements in the critical paths."
  4. 对编码标准的质疑

    • 部分规则(如强制else子句)可能显得冗余,但有助于调试。
    • 引用:"a = a; // misra... I am sceptical that these coding standards make for good code!"
    • 引用:"When code is running at scale, nonzero probability events happen all the time."
  5. 语言选择讨论

    • 有人建议Ada可能更适合,但人才和工具链不足是障碍。
    • 引用:"they couldn’t find enough people to write Ada, and even if they could, they also couldn’t find enough Ada middleware"
    • 引用:"Ada is having a bit of a resurgence with stuff like NVidia picking SPARK."
  6. 错误处理方式争议

    • 异常与错误码各有支持者,但航空电子更倾向确定性方案。
    • 引用:"one might fail to handle error codes just as well"
  7. 对F-35项目的负面看法

    • 部分评论认为项目延误或失败与技术选择相关。
    • 引用:"Ahhh. They use C++..... That explains all the delays on the F-35"
  8. 工具与资源推荐

    • 推荐相关视频和文档作为延伸阅读。
    • 引用:"LaurieWired is an awesome follow on YouTube!"

总结呈现了航空电子编码的严格性、语言选择的权衡,以及对规范实际效果的争议,同时保留了正反方观点的代表性引用。