slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
安全 C++ 提案可以复制 Rust 的内存安全吗?
17611538698
webmaster@21cto.com

安全 C++ 提案可以复制 Rust 的内存安全吗?

编程语言 0 953 2024-11-06 11:53:16
导读:当前版本的 Safe C++ 将耗时 18 个月设计和实现。但它能满足开发人员的所有需求与表现力吗?

图片

为了避免与内存相关的错误,通常的建议让 C++ 开发人员改用Rust。但是,还有其他的选择项吗?

第 21 工作组(成立于 1990 年,由“对 C++ 工作感兴趣的……公认专家”组成) 在 9 月份 的 邮件中发布了一项提案  ,此后,这项“安全 C++ 扩展”提案在网上引发了大量讨论。

这一切都表明 C++ 社区正在开展一项更大规模的运动,为这门已有 39 年历史的编程语言探索新的解决方案,以解决内存安全方面的持续担忧。这项安全 C++ 提案只是正在进行的努力的一部分,其他想法和方法也在提出和讨论中。

而这次对话的背景是,更广泛的编程社区对更安全代码的需求越来越大。因此,新的 Safe C++ 提案首先承认,对 C++ 的持续批评“削弱了该语言对新手的价值”。但随后,它还认为,Rust 的模范安全模型可以成为“加强 C++ 的机会”,并补充说,Rust 在内存安全保障方面长达十年的工作引领了潮流,并为 Safe C++ 的设计提供了很大的参考价值。

“采用安全专家一直指出的相同所有权和借用安全模型,是让 C++ 在下一代中保持可行性的明智且及时的方法。”

提出解决方案


根据两位非常敬业的开发人员撰写的提案,Safe C++ 的当前版本耗时 18 个月进行设计和实现:


  • 纽约的 Sean Baxter 是一名资深开发人员,他的职业生涯包括在美国国家航空航天局 (NASA) 喷气推进实验室担任软件工程师三年半,之后担任 NVIDIA 研究科学家两年多(根据其LinkedIn 个人资料),他创建了一个名为Circle的 C++ 替代编译器。

  • 住在萨克拉门托的Christian Mazakas是C++ 联盟的资深工程师,该联盟是一家 慈善机构,成立于 2017 年,其旨在通过鼓励新的代码库和语言提案,以及赞助教育计划来支持 C++ 社区。


9 月, C++ 联盟宣布与 Baxter 合作,称这是“一项革命性的提案,为 C++ 编程语言添加了内存安全功能”。公告称,C++ 联盟总裁兼执行董事 Vinnie Falco 称这是“C++ 生态系统的一个重要里程碑,因为对安全代码的需求从未如此迫切”。

那么,他们是如何实现的?该提案的一个“关键部分”是使用所谓的安全标准库来扩充 C++ 标准库:“关键数据结构和算法的健壮、内存安全的实现,通过将这些组件集成到 C++ 标准库中,我们可以确保新代码从一开始就考虑到安全性。”

正如其文档中所说,“安全第一。安全 C++ 开发人员不得编写可能导致生命周期安全、类型安全或线程安全未定义行为的操作。有时这些操作会被编译器前端禁止,指针算法就是这种情况。有时这些操作会被编译器中端的静态分析禁止,从而阻止未初始化变量的使用和释放后使用错误,这是所有权和借用安全模型的使能技术。其余问题,如越界数组下标,则通过运行时恐慌和中止来解决。”

但“当前是一套新功能,可以改进那些拒绝向用户提供的不安全功能”,包括新的模式匹配和复杂的借用检查(跟踪引用,以避免出现释放后使用漏洞的可能性)。

不断发展的工具链


对于 Baxter 来说,这是他一个长期的兴趣。 


早在 2019 年,他就创建了 Circle,这是一款新型 C++ 编译器,他说只需改进工具链,它就能提供成熟后继语言的全部优势。从定义上讲,此方法与现有的 C++ 代码完全兼容。正是在 Circle 中,Baxter 首次为 C++ 实现了类似 Rust 的借用检查器——但即使如此,Baxter 仍对 C++ 代码的长期命运表现出了更大的兴趣。


Baxter 在 2022 年宣布推出 Circle 的新版本时,向那些 C++ 批评者发起了挑战,后者称该语言本质上存在缺陷/不安全/编译速度慢等问题。他说:


“软件可以做它该做的事,只要付出努力,就可以做一些新的事情。这里记录的技术扩展了 C++ 工具链,可以修复语言缺陷,使语言更安全、更高效,同时保持与现有代码资产 100% 的兼容性……


“未来的 C++ 不仅仅是一种语言。它是编程朝着更安全、更简单、更高效的方向发展的起点,同时保持与现有 C++ 资产的互操作性。


那么为什么不让每个人都改用 Rust 呢?新的 Safe C++ 提案清晰说明了这一点。


“Rust 对于职业 C++ 开发人员来说很陌生,再加上互操作工具的摩擦,使得通过用 Rust 重写关键部分来强化 C++ 应用程序变得很困难。为什么没有针对内存安全的语言解决方案?为什么不使用 Safe C++?


最近一篇文章回顾了从研究人员Microsoft Azure 首席技术官 Mark Russinovich,甚至美国国家安全局白宫等各界人士发出的警告记录


Baxter 亦承认:“政府最近对内存安全的警告已引起全球科技行业的关注。


“我研究了理论,并看到了使用新工具的机会,可以帮助 C++ 工程师编写更正确的程序并消除与安全漏洞最相关的软件缺陷。

图片

资料发生了什么变化?


这并不是改进 C++ 的唯一想法。


在13 个月前,C++ 创始人 Bjarne Stroustrup 在 CppCon 上告诉社区开发者,该语言的现状是“一个机会”,并补充说,从该语言诞生之初,类型和资源安全就一直是目标。Stroustrup 还建议使用配置文件改进该语言——可能由编译器检查的安全保障规则。


标准 C++ 基金会 (由微软、谷歌和英特尔等支持的非营利组织) 的 GitHub 存储库中的配置文件已经引发了开发者们一些思考。


它有一个由 Bjarne Stroustrup 和 ISO C++ 标准委员会主席Herb Sutter合作编辑的 C++ 核心指南页面。该页面现在包括对“相关规则组”(称为配置文件) 的引用,用以实现类型安全和边界安全等期望结果。


“这些配置文件旨在供工具使用,但也可以作为人类读者的辅助工具。我们不会将执行部分的评论限制在我们知道如何执行的事情上;有些评论仅仅是一些可能启发一些工具构建者的愿望。


但上周四(10 月 24 日),Baxter 发表了一篇新论文,题为“安全概况为何失败”。


“安全配置文件于 2015 年推出,承诺检测现有 C++ 代码中的所有终身安全缺陷。这是一个大胆的主张。但经过十年的努力,配置文件未能为 C++ 安全提供规范、可靠的实现或任何切实的好处。这一失败的原因涉及其设计核心中的许多错误前提。


图片

该论文还指出,就目前而言,C++ 源代码“没有足够的信息来实现内存安全……”并建议“将 Rust 的安全模型纳入 C++”(这也将提高 Rust 和 C++ 之间的互操作性)。“通过使用可以出现在函数声明中的所有 Rust 构造的表示来扩展 C++(例如 Rust 枚举、借用和生命周期、ZST、特征等),可以大大增加常用词汇类型的数量……

“C++ 可以实现内存安全,但不能通过摒弃所有可行的方法来实现,而这正是《安全配置文件》的作者们所做的。”该论文认为,C++ 必须“不断发展,以更明确地表达别名、生命周期与安全属性。”

协作的过程


此项讨论正在进行中,而且人们希望讨论到更多内容。


除了宣布该提案外,Baxter 和联盟还宣布他们正在“寻求开发人员、研究人员和其他利益相关者的反馈”,并相信协作过程“将有助于完善项目范围并确保其满足 C++ 生态系统最紧迫的需求”。


“有了业界的参与,我们可以解决剩余设计问题,”他们的提案指出,“再过 18 个月,我们就能拥有一门足够强大的语言与标准库,供主流社区评估。虽然 Safe C++ 是该语言的一大扩展,但构建新工具的成本并不高……我们正在共同设计 Safe C++ 标准库和语言扩展。欢迎访问我们的存储库以关注我们的工作。


从 6 月份开始,“ SafeCPP.org ”域名已经开通——现在会自动将所有访问者重定向到 Safe C++ 提案的 draft.html 页面。

作者:聆听音乐的鱼

评论