文章摘要
战斗机禁用90%的C++功能是为了确保系统安全性和可靠性,避免复杂特性带来的潜在风险,如内存泄漏和不可预测行为。严格的编码规范只允许使用经过验证的简单功能,以保障关键任务系统的稳定运行。
文章总结
为什么战斗机禁用90%的C++功能
视频概述
LaurieWired的这期视频探讨了战斗机(如F-35)为何严格限制C++语言功能的使用。视频指出,一个未处理的异常就曾导致价值5亿美元的火箭在几秒内损毁,因此F-35的工程师制定了史上最严格的编码标准之一。视频内容包括飞行软件的历史、五角大楼对C++的采用,以及F-35的C++编码标准。
主要内容
1. 飞行软件的历史
- 早期飞行控制系统的演变及软件在航空中的关键作用。
五角大楼与C++
- 五角大楼曾面临数千种编程语言的混乱局面,最终选择C++,但对其功能进行了严格限制。
F-35的C++标准
- 禁用异常处理:未处理的异常可能导致灾难性后果。
- 限制递归和循环复杂度:确保代码可预测性和稳定性。
- 内存预分配:避免运行时动态内存分配带来的不确定性。
安全关键软件的未来
- 探讨如何在保证安全性的同时利用现代编程语言的优点。
观众评论亮点
- 有观众提到,早期游戏开发(如《小龙斯派罗》)也采用了类似的严格编码规则。
- 另一位观众分享了阿丽亚娜5号火箭事故的细节,指出异常处理不当是导致失败的原因之一。
- 还有人调侃:“如果战斗机用JavaScript,可能需要额外引擎来支持CPU运行。”
资源链接
- F-35 C++编码标准
- 示例代码GitHub仓库
视频全长约30分钟,分为多个章节,适合对航空软件或编程安全感兴趣的观众。
评论总结
以下是评论内容的总结:
航空电子编码规范的限制性
- 严格禁止异常、递归和动态内存分配,以确保确定性和可预测性。
- 引用:"no exceptions, no recursion, no malloc()/free() in the inner-loop"
- 引用:"The '90% ban' isn’t about hating C++ — it’s about guaranteeing determinism."
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."
与其他领域的对比
- 高频交易等领域可能有类似的可靠性和性能要求。
- 引用:"It seems like they’d have similar speed/reliability/predictability requirements in the critical paths."
对编码标准的质疑
- 部分规则(如强制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."
语言选择讨论
- 有人建议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."
错误处理方式争议
- 异常与错误码各有支持者,但航空电子更倾向确定性方案。
- 引用:"one might fail to handle error codes just as well"
对F-35项目的负面看法
- 部分评论认为项目延误或失败与技术选择相关。
- 引用:"Ahhh. They use C++..... That explains all the delays on the F-35"
工具与资源推荐
- 推荐相关视频和文档作为延伸阅读。
- 引用:"LaurieWired is an awesome follow on YouTube!"
总结呈现了航空电子编码的严格性、语言选择的权衡,以及对规范实际效果的争议,同时保留了正反方观点的代表性引用。