导读:当前版本的 Safe C++ 将耗时 18 个月设计和实现。但它能满足开发人员的所有需求与表现力吗?
为了避免与内存相关的错误,通常的建议让 C++ 开发人员改用Rust。但是,还有其他的选择项吗?
第 21 工作组(成立于 1990 年,由“对 C++ 工作感兴趣的……公认专家”组成) 在 9 月份 的 邮件中发布了一项提案 ,此后,这项“安全 C++ 扩展”提案在网上引发了大量讨论。
这一切都表明 C++ 社区正在开展一项更大规模的运动,为这门已有 39 年历史的编程语言探索新的解决方案,以解决内存安全方面的持续担忧。这项安全 C++ 提案只是正在进行的努力的一部分,其他想法和方法也在提出和讨论中。
而这次对话的背景是,更广泛的编程社区对更安全代码的需求越来越大。因此,新的 Safe C++ 提案首先承认,对 C++ 的持续批评“削弱了该语言对新手的价值”。但随后,它还认为,Rust 的模范安全模型可以成为“加强 C++ 的机会”,并补充说,Rust 在内存安全保障方面长达十年的工作引领了潮流,并为 Safe C++ 的设计提供了很大的参考价值。
“采用安全专家一直指出的相同所有权和借用安全模型,是让 C++ 在下一代中保持可行性的明智且及时的方法。”
纽约的 Sean Baxter 是一名资深开发人员,他的职业生涯包括在美国国家航空航天局 (NASA) 喷气推进实验室担任软件工程师三年半,之后担任 NVIDIA 研究科学家两年多(根据其LinkedIn 个人资料),他创建了一个名为Circle的 C++ 替代编译器。
住在萨克拉门托的Christian Mazakas是C++ 联盟的资深工程师,该联盟是一家 慈善机构,成立于 2017 年,其旨在通过鼓励新的代码库和语言提案,以及赞助教育计划来支持 C++ 社区。
9 月, C++ 联盟宣布与 Baxter 合作,称这是“一项革命性的提案,为 C++ 编程语言添加了内存安全功能”。公告称,C++ 联盟总裁兼执行董事 Vinnie Falco 称这是“C++ 生态系统的一个重要里程碑,因为对安全代码的需求从未如此迫切”。
那么,他们是如何实现的?该提案的一个“关键部分”是使用所谓的安全标准库来扩充 C++ 标准库:“关键数据结构和算法的健壮、内存安全的实现,通过将这些组件集成到 C++ 标准库中,我们可以确保新代码从一开始就考虑到安全性。”
正如其文档中所说,“安全第一。安全 C++ 开发人员不得编写可能导致生命周期安全、类型安全或线程安全未定义行为的操作。有时这些操作会被编译器前端禁止,指针算法就是这种情况。有时这些操作会被编译器中端的静态分析禁止,从而阻止未初始化变量的使用和释放后使用错误,这是所有权和借用安全模型的使能技术。其余问题,如越界数组下标,则通过运行时恐慌和中止来解决。”
但“当前是一套新功能,可以改进那些拒绝向用户提供的不安全功能”,包括新的模式匹配和复杂的借用检查(跟踪引用,以避免出现释放后使用漏洞的可能性)。
该论文还指出,就目前而言,C++ 源代码“没有足够的信息来实现内存安全……”并建议“将 Rust 的安全模型纳入 C++”(这也将提高 Rust 和 C++ 之间的互操作性)。“通过使用可以出现在函数声明中的所有 Rust 构造的表示来扩展 C++(例如 Rust 枚举、借用和生命周期、ZST、特征等),可以大大增加常用词汇类型的数量……
“C++ 可以实现内存安全,但不能通过摒弃所有可行的方法来实现,而这正是《安全配置文件》的作者们所做的。”该论文认为,C++ 必须“不断发展,以更明确地表达别名、生命周期与安全属性。”
作者:聆听音乐的鱼
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。