#feature on safety
#include <std2.h>
int main() safe {
std2::vector<int> vec { 11, 15, 20 };
for(int x : vec) {
// Ill-formed. mutate of vec invalidates iterator in ranged-for.
if(x % 2)
mut vec.push_back(x);
std2::println(x);
}
}
$ circle iterator.cxx -I ../libsafecxx/single-header/
safety: during safety checking of int main() safe
borrow checking: iterator.cxx:10:11
mut vec.push_back(x);
^
mutable borrow of vec between its shared borrow and its use
loan created at iterator.cxx:7:15
for(int x : vec) {
^
“革命性”「Safe C++」扩展提案:引入内存安全、有望成为 C++ 标准
C++ 社区上周公布了堪称“革命性”的「Safe C++」扩展提案,目标是为 C++ 添加内存安全特性。
该项提案将由名为"C++ Alliance"的机构与工程师 Sean Baxter 合作开发,C++ Alliance 计划将「Safe C++」扩展提案提交给 ISO,以纳入 C++ 标准。
采用「Safe C++」扩展编写的代码示例:
https://github.com/cppalliance/safe-cpp/blob/master/proposal/iterator.cxx
C++ Alliance 主席兼执行董事 Vinnie Falco 在博客写道:
过去几年来,包括谷歌和微软在内的科技巨头一直在宣传内存安全漏洞带来的问题,并推广使用除 C 和 C++ 以外不需要手动内存管理的语言。
这些消息也引起了拥有大量遗留代码的美国政府公共部门的注意,并促使白宫和美国网络安全和基础设施安全局(CISA)鼓励使用内存安全编程语言 —— Rust。
尽管有 C/C++ 开发者反驳说,只要正确遵守 ISO 标准并认真应用测试工具,就可以取得类似的结果。
就连 C++ 之父 Bjarne Stroustrup 也表示,“我们现在可以在 ISO C++ 中实现完美的类型与内存安全性。”
去年,互联网安全研究组(ISRG)联合创始人兼执行董事 Josh Aas 在接受采访时指出,虽然理论上有可能编写出内存安全的 C++ 代码,但在实际场景中并没有这样的案例,因为 C++ 并不是从一开始就设计用于内存安全的。
而为了加快向内存安全编程语言的过渡,美国国防部高级研究计划局(DARPA)也启动了 TRACTOR 项目。TRACTOR 是 TRanslating All C TO Rust 的缩写,目标是基于 AI 技术开发代码转换平台,自动将旧 C 代码转换为 Rust 代码。
由此可见,「Safe C++」扩展提案的诞生背景正是为了应对各种批评声音,并响应美国国家安全局(NSA)、美国网络安全与基础设施署(CISA)、白宫和 DARPA 等机构对内存安全性的需求。
相关阅读
C++ 之父 Bjarne Stroustrup 分享人生建议
https://safecpp.org/P3390R0.html
https://cppalliance.org/vinnie/2024/09/12/Safe-Cpp-Partnership.html