C++ 阅读时间 2 分钟

“能力越大责任越大”的心态如何延缓了更安全的 C++ 设计

分享本文
The 'Power Comes with Responsibility' Mindset Delayed Safer C++ Design

在 C++ 的早期,内存安全问题——缓冲区溢出、悬空指针、释放后使用——广为人知,但并未被视为需要在语言层面修复的紧迫缺陷。为什么?

1.性能为王

C++ 在 20 世纪 80 年代作为对 C 的强大升级而出现。它赋予开发者:

  • 对内存的直接控制
  • 面向对象编程
  • 零成本抽象

这种控制意味着快如闪电的应用。内存 bug?那被认为是开发者的责任。当时的心态是:“能力越大,责任越大——写出更好的代码就行。”确实,C++ 赋予开发者:

  • C++ 赋予开发者对内存的直接访问手动资源管理底层控制精细的性能优化
  • 但这也意味着这门语言不会手把手地帮你。它不会阻止你犯下危险的错误——比如缓冲区溢出、重复释放或悬空指针。
  • 因此,责任落在开发者身上,要写出正确、安全、高效的代码。

2.开发者离硬件更近

那时,大多数 C++ 开发者都是系统程序员,或从事接近硬件的工作。他们深刻理解内存——malloc、指针、栈与堆。安全防护网既不被期待,甚至不被需要。

3.安全当时不是核心关切

在八九十年代,安全威胁没有今天这样深远的影响。内存泄漏或溢出大多被视为bug 或稳定性问题,而不是远程代码执行的载体或数据窃取的手段。

4.工具还不存在

静态分析器、模糊测试器、ASan 或 Valgrind 之类的工具?要么不存在,要么极其有限。及早发现细微的内存问题并不容易。因此,大多数团队只能靠经验和评审。


快进到今天:为什么我们现在在乎

今天,软件驱动一切——汽车、飞机、心脏起搏器、金融系统。内存漏洞不再只是崩溃——它可能是网络攻击或灾难性故障

随着意识的提高,以及一系列举措的出现:

  • 微软推动内存安全语言
  • Rust 的崛起
  • GCC/Clang 的安全加固编译选项
  • Google 在 Carbon 和内存安全 C++ 子集上的努力

……显然,行业终于开始正视这个潜伏了数十年的风险。


下一步是什么?

早期 C++ 的哲学优先考虑能力、性能和灵活性——而非安全。这在当时是合理的。但世界已经改变。现在,我们重新思考“现代 C++”应该意味着什么——不只是更快,还要在设计上更安全

最近,C++ 之父 Bjarne Stroustrup 向 C++ 社区发出行动呼吁,以回应政府机构和行业领袖对内存安全日益严格的审查。

现在的问题是:C++ 能否很快在设计上解决其安全问题,还是 Rust 这样的语言将继续在 C++ 传统主导的领域中攻城略地。

分享本文