并非所有内容都会用 Rust 重写,因此 C++必须变得更安全,我们都应该关心 C++ 变得更安全。
越来越明显的是,不仅许多程序员看到了内存安全的好处,政策制定者也看到了。“内存安全”的概念已经从编程语言的创建者和用户在讨论中使用的技术术语变成了消费者报告和白宫所熟知的术语。
许多现有的流行语言至少在部分上已经是内存安全的。事实上,美国政府于 2023 年 12 月发布的“内存安全路线图案例”将 C♯、Go、Java、Python 和 Swift 列为内存安全语言,所有这些垃圾收集语言都覆盖了当今大量的设备。
- C♯ 是具有 .NET 运行时的 Windows 机器中非常流行的语言,
- Go 用于许多 Web 服务器和流行云主机运行的“云原生”软件,
- Java 是 Android 的语言,也是大型企业使用的大量广泛部署的软件,
- Python 是当今许多数据科学应用程序最流行的语言,
- Swift 是当今所有 iOS 应用程序的推荐语言(尽管 Objective-C 仍然受到支持和广泛使用)。
Rust 在垃圾收集不被普遍接受的环境中实现了内存安全,因此需要垃圾收集的语言通常不会被采用。在这些领域,绝大多数现有代码都是用 C 或 C++ 编写的。
我们能否将代码从 C 或 C++ 重写为 Rust,从而获得以前无法实现的内存安全优势?Rust 社区内外都流传着一个笑话:对于任何项目,人们都应该用 Rust 重写它,Rust Evangelism Strike Force随时准备向其观察到的任何项目提出这一建议,尤其是在出现与内存安全相关的漏洞时。
如果您不大量重写代码,而是定期修复错误,那么随着时间的推移,代码中的漏洞数量就会减少。(前提是:修复的同时不能引入新bug,只有上帝和完美主义者才能做到)
C++ 必须变得更加安全 如何让 C++ 更安全”这一类别目前有四个阵营:
- 合约contracts
- 个人资料profiles
- 后继语言
- 借用检查borrow checking
这是对最近的 C++ 标准委员会会议关于进一步探索 C++ 内存安全机会的投票的回应。
Circle是 Sean Baxter 的语言,是 C++ 的“超集的子集”。这意味着您可以将有效的现有 C++ 代码与使用 C++ 的安全扩展编写的代码混合使用,后者类似于C++,但设置了限制以加强内存安全。
Carbon是“C++ 的实验性继任者”,旨在以更高的安全性与 C++ 进行互操作(尽管明确旨在提供比 Rust 更少的安全保证)。用 Carbon 编写的代码不是有效的 C++ 代码,但用 Carbon 编写的代码旨在能够轻松调用 C++,并被 C++ 代码轻松调用。
cppfront由 Herb Sutter 开发,是 C++ 的一种实验性语法,可编译为“真正的” C++,本质上旨在让您更轻松/默认地编写更安全的 C++ 代码,同时减少需要记住不要开火的陷阱。