C++ 必须变得更安全
内容提要
C++需要更安全,因为内存安全已成为重要议题。许多流行语言已提供内存安全,如C♯、Go、Java、Python和Swift。Rust在不支持垃圾收集的环境中实现了内存安全。有四个阵营正在探索如何使C++更安全:合约、个人资料、后继语言和借用检查。Circle、Carbon和cppfront是一些实验性的语言和工具,旨在增强C++的内存安全性。
延伸解读
内存安全为何成为政策焦点
文章指出,内存安全已从技术术语上升为政策制定者关注的议题,美国政府2023年12月的“内存安全路线图案例”将C♯、Go、Java、Python和Swift列为内存安全语言。这意味着内存安全不再仅是编程语言社区的内部讨论,而是可能影响未来软件采购、开发规范乃至法规的因素。对于C++开发者而言,理解这一趋势有助于预判行业要求的变化。
Rust的定位与重写困境
Rust在不依赖垃圾收集的环境中实现了内存安全,因此适用于垃圾收集不被普遍接受的领域,而这些领域绝大多数现有代码是C或C++。文章提到“用Rust重写一切”的玩笑,并指出若不大量重写而是定期修复错误,漏洞数量会随时间减少,但前提是不引入新bug。这揭示了完全重写的现实困难,也说明C++自身改进的必要性。
四个阵营的改进路径
文章列出使C++更安全的四个探索方向:合约、个人资料、后继语言和借用检查。这是对C++标准委员会会议投票的回应。这些阵营代表了不同的技术路线:有的在现有语言内增加约束,有的探索全新语言。了解这些方向有助于开发者评估未来C++生态可能的分化与兼容性策略。
实验性工具的安全权衡
Circle是C++的“超集的子集”,允许混合现有C++代码与安全扩展;Carbon是实验性继任者,旨在与C++互操作,但明确提供比Rust更少的安全保证;cppfront是实验性语法,编译为真正的C++,旨在让编写安全代码更轻松。这些工具在安全性与兼容性之间各有取舍,开发者需根据项目对安全保证和迁移成本的要求进行权衡。
Q&A
为什么C++需要变得更安全?
C++需要变得更安全是因为内存安全已成为重要议题,许多程序员和政策制定者都意识到内存安全的好处。
有哪些编程语言提供了内存安全?
提供内存安全的编程语言包括C♯、Go、Java、Python和Swift。
Rust是如何实现内存安全的?
Rust在不支持垃圾收集的环境中实现了内存安全,因此适用于需要高性能的场景。
C++变得更安全的四个阵营是什么?
C++变得更安全的四个阵营是合约、个人资料、后继语言和借用检查。
Circle和Carbon是什么?
Circle是C++的超集的子集,允许与现有C++代码混合使用;Carbon是C++的实验性继任者,旨在提供更高的安全性。
cppfront的目的是什么?
cppfront是一种实验性语法,旨在简化安全代码的编写,并编译为真正的C++。