整理 | 郑丽媛
上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语言,例如 C 和 C++,应改用 Rust 等内存安全编程语言进行开发。
对于这个观点,上周 C++ 之父 Bjarne Stroustrup 在接受 InfoWorld 的采访时进行了反驳:
“我感到惊讶的是,这些政府文件的作者似乎对当代 C++ 的优势以及它为提供强大安全保证所做的努力都视而不见。另一方面,他们似乎已经意识到,编程语言只是工具链的一部分,因此改进工具和开发流程至关重要。”
Stroustrup 强调,这门于 1979 年设计的编程语言,自诞生的第一天起,其目标就一直是提高安全性:“只要将 K&R C 语言与最早的 C++、早期的 C++ 以及当代的 C++ 进行比较就知道了。”围绕这个问题,Stroustrup 曾在 CppCon 2023 大会的主题演讲中概述了这一演变过程,可以发现许多高质量的 C++ 都是使用基于 RAII(Resource Acquisition Is Initialization)、容器和资源管理指针的技术编写的,而非传统的 C 风格指针乱码。
除此之外,Stroustrup 还提到了他们为改进 C++ 安全性做出的一些努力:“在安全性方面主要存在两个问题。在数十亿行的 C++ 代码中,很少有代码能完全遵循现代准则,而且人们对安全重要性的认识也存在差异。我和 C++ 标准委员会正在努力解决这个问题。”
“Profiles 是一个框架,用于说明一段代码所需要的 guarantees,并使实现能够验证这些保证。委员会网站上有相关文件,搜索 WG21 即可(https://www.open-std.org/jtc1/sc22/wg21/)。然而,我们中的一些人并不想等待委员会必然缓慢的进展。
Profiles 这个框架,允许我们逐步改进 guarantees,例如较快地消除大多数 range errors,并通过局部静态分析和最小化运行时检查逐步将 guarantees 引入大型代码库。我对 C++ 的长期目标,一直是在需要的时候提供类型和资源安全。也许当前对内存安全性的推动——我想要的 guarantees 的一个子集——将有助于我的努力,C++ 标准委员会中的许多人也都赞同我的观点。”