随着Rust等内存安全语言的崛起,C++正面临前所未有的挑战。为应对这一竞争,C++社区近期发布了“Safe C++ Extensions”(安全C++扩展)提案,旨在提升内存安全性,与Rust展开正面较量。
内存安全之争:C++与Rust的对决近年来,内存安全成为编程语言领域的热点话题。Rust作为一门内存安全、性能优越的系统级编程语言,受到了业界的广泛关注和采用。许多大型组织和政府机构(如NSA、CISA和DARPA)都呼吁在新项目中采用像Rust这样的内存安全语言。这使得传统的C++社区感受到了巨大的压力和竞争。
微软Azure的CTO Mark Russinovich曾公开建议弃用C和C++,转而采用Rust。一些技术领袖也表达了类似的观点,认为C++的内存安全问题难以彻底解决。这些声音促使C++社区不得不正视内存安全的挑战,以免在未来的技术竞争中被淘汰。
Safe C++ Extensions的提出:C++的主动出击为应对来自Rust的竞争压力,C++社区积极行动,推出了“Safe C++ Extensions”提案。C++联盟的主席兼执行董事Vinnie Falco在宣布这一提案时表示:
“这是一个革命性的提案,为C++编程语言添加了内存安全特性。这次合作标志着C++生态系统的一个重要里程碑,因为对安全代码的需求比以往任何时候都更加迫切。”
该提案由Circle编译器的创建者Sean Baxter和C++联盟的Christian Mazakas共同提出,旨在通过引入类似于Rust的内存安全机制,帮助开发者编写更安全的C++代码。
提案的核心:借鉴Rust的内存安全机制Safe C++ Extensions的核心思想是在C++中引入类似于Rust的“借用检查器”(borrow checker)和其他内存安全机制。通过在编译时进行内存和类型安全检查,防止常见的内存错误,如缓冲区溢出和“释放后使用”(use-after-free)等。
Baxter和Mazakas指出,虽然Rust在内存安全方面表现出色,但将现有的C++代码迁移到Rust存在诸多困难,包括语言特性的差异和互操作性的障碍。他们认为,与其要求资深的C++开发者学习一门全新的语言,不如在C++内部寻求解决方案。
他们在提案中写道:
“为什么不在语言内部解决内存安全问题呢?为什么不推出一个安全的C++?”
具体措施:增强C++的内存安全为实现这一目标,Safe C++项目计划:
引入编译时的借用检查:类似于Rust的机制,防止内存的不安全使用。加强初始化分析:确保类型安全,防止未初始化的变量使用。保持与现有C++代码的兼容性:让现有代码继续正常工作,开发者可以逐步引入安全特性。Baxter强调,这不仅是对最佳实践的重申,而是为C++添加了新的技术手段,以在编译时阻止不安全的代码编写。
面临的挑战与未来展望尽管Safe C++ Extensions的提出展示了C++社区积极应对内存安全挑战的决心,但要在语言层面彻底解决内存安全问题并非易事。正如软件工程师Alex Gaynor所言,虽然可以通过努力使C++变得更安全,但要达到像Swift、Go或Rust那样的内存安全水平,目前还缺乏简单的解决方案。
然而,考虑到重新用另一种语言重写整个项目的高昂成本,Safe C++的出现为众多C++项目提供了一个更现实的选择。Baxter表示:
“基础已经奠定:我们拥有出色的借用检查和初始化分析,为健全性保证提供了支持。下一步是全面审视C++的所有特性,并为它们制定内存安全的版本。虽然这是一个巨大的努力,但考虑到减少C++安全漏洞的重要性,这一努力是值得的。”
结语面对Rust等内存安全语言的崛起,C++社区选择了积极应对,试图通过引入Safe C++ Extensions来提升自身的内存安全性。虽然挑战仍在,但这一举措显示了C++在新时代下的自我革新和与时俱进的精神。未来,C++能否凭借这些努力继续保持其在系统级编程中的地位,与Rust等新兴语言展开竞争,让我们拭目以待。
Safe C++ Extensions提案:https://safecpp.org/P3390R0.html
早就应该有了,如果是真的,是编译检查,还是运行时自动管理?只是编译检查那么程序员还是要谣操心
C++在原有基础修修补补,沿用很多不合理的设定简直逼疯强迫症。比如没有成员的类实例会自动额外占用1字节,就为了能用指针区分对象。。。
支持 saft c++