C++ 必须变得更安全

💡 原文中文,约1500字,阅读约需4分钟。
📝

内容提要

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++。

🏷️

标签

➡️

继续阅读