返回首页

C++ 与开发中的银弹神话

本文揭穿了关于 '不安全 C++' 和缺乏银弹的神话。它展示了重用和工具如何确保现代项目中的安全性和生产力。

C++ 安全吗?揭穿开发者的神话
Advertisement 728x90

C++安全迷思与开发实践的演进

诸如“没有银弹”或“C++不安全”这类固定说法常被脱离语境使用,忽视了行业的变化。这些陈词滥调成为实施有效方法的障碍。现实实践表明,显著改进是可以实现的,C++的安全性取决于方法论,而非语言本身。

重新思考“银弹”

Fred Brooks在1986年的原始论点警告不要寻求解决所有开发问题的通用方案。如今,这一说法已被简化为绝对化,阻碍了对突破性工具的探索。实际上,银弹是通过复用实现的:

  • 现成的库和框架将代码量减少一个数量级。
  • 基础设施服务消除了自定义实现的需求。
  • 标准化协议最小化了重复劳动。

Brooks在后来的版本中承认:组件化和成熟平台提供了生产力提升,而以前代码必须从头重写。LLM和云生态系统放大了这一效应,将项目复杂性降低了数个数量级。

Google AdInline article slot

C++安全:从迷思到实践

“C++不安全”的说法忽视了其特性:该语言默认不具备内存安全性,并允许未定义行为(UB)。这在不加适当控制时会增加风险,但缺乏比较标准并不意味着它“最不安全”。

关键评估因素:

  • 威胁模型:漏洞类型(内存损坏、注入)。
  • 环境:嵌入式、高负载后端、驱动程序。
  • 数据信任级别和容错能力。

C++提供了最小化风险的工具:

Google AdInline article slot
  • 智能指针(std::unique_ptr、std::shared_ptr)防止泄漏。
  • RAII确保资源的确定性释放。
  • constexprstatic_assert在编译时捕获错误。
  • 消毒剂(AddressSanitizer、UndefinedBehaviorSanitizer)在运行时检测UB。

没有纪律,这些机制毫无用处。问题在于“布里丹之驴”:开发者避免在严格的C++和内存安全语言(Rust、Ada)之间做出选择,继续采用粗心的实践。

选择瘫痪与真实替代方案

团队常要求不可能之事:C++的自由度、速度和零漏洞,且无需成本。结果是长期的内存错误和UB。解决方案需要果断行动:

  • 实施CI/CD,包含强制检查(clang-tidy、Coverity)。
  • 限制API:禁止原始指针,强制使用容器。
  • 将关键模块迁移到Rust,用于FFI集成。

这些措施有回报:C++系统被用于内核、浏览器和游戏引擎,具有高安全级别。

Google AdInline article slot

关键要点

  • 复用是真正的银弹,将工作量减少一个数量级。
  • C++安全通过纪律和工具实现,而非禁止该语言。
  • 迷思已过时:80年代的语境不适用于现代技术栈。
  • 选择是必须的:严格流程或迁移是停滞的替代方案。
  • 实践决定一切:CVE数据显示漏洞与流程相关,而非语言。

技术进步需要摒弃教条。C++在性能和控管至关重要的任务中仍保持相关性,前提是具备成熟的DevOps实践。

— Editorial Team

Advertisement 728x90

继续阅读