SafeC++提案能复制Rust的内存安全性吗?

C语言与CPP编程 2025-02-21 09:02

来自公众号:InfoQ 作者 | David Cassel 译者 | 平川 策划 | Tina

本文最初发布于博客 THENEWSTACK。

为了避免与内存相关的 Bug,C++ 开发人员 经常被迫改用 Rust。但他们是否还有其他的选择呢?

在 九月份的邮件 中,第 21 工作组(成立于 1990 年,由 “对 C++ 工作感兴趣的、公认的专家 ”组成)发布了 一项提案。此后,这项名为“Safe C++ 扩展“的提案在 网上 引发了 广泛的讨论。

一切都表明,C++ 社区正在开展一场声势更为浩大的运动,为这门已经有 39 年历史的编程语言探索新的解决方案,以应对人们对内存安全的持续关注。Safe C++ 提案只是其持续努力的一部分,人们还在 不断地 提出其他的想法和方法,有些已在 讨论 中。

这次对话的背景是,编程社区对提升安全代码性的需求日益迫切。因此,新提案 Safe C++ 首先承认,对 C++ 的持续批评 “削弱了该语言对新手的吸引力”,但同时也指出,Rust 堪称典范的安全模型 可以 “成为加强 C++ 的契机”,并补充说,Rust 长达十年之久的内存安全保证工作为我们指明了方向,并为 Safe C++ 的设计提供了大量参考信息。

“采用安全专家证明过的安全模式所有权和借用,是一个能够让下一代 C++ 保持活力的既合理又合时的方法"。

提出解决方案

根据提案,Safe C++ 的当前版本花了 18 个月的时间来设计和实现。该提案由下面这两位非常敬业的开发人员所撰写:

  • 来自纽约的 Sean Baxter 是一名开发人员,他的职业生涯包括在美国国家航空航天局喷气推进实验室担任了三年半的软件工程师,之后又在英伟达公司(NVIDIA)担任了两年多的研究科学家(参见 他在 LinkedIn 上的个人简介),并创建了一个 C++ 编译器的替代实现 Circle。

  • 来自萨克拉门托的 Christian Mazakas 是 C++ 联盟 的高级工程师。该 联盟 是一家成立于 2017 年的 501(c)(3) 慈善机构,旨在通过鼓励提交新代码库和语言提案以及赞助教育活动来支持 C++ 社区。

C++ 联盟于 9 月份 宣布 与 Baxter 建立合作伙伴关系,并将其称作是“增加 C++ 语言内存安全特性的革命性提案”。C++ 联盟总裁兼执行董事 Vinnie Falco 称,这是 “C++ 生态系统中的一个重要里程碑,因为对安全代码的需求从未像现在这样迫切”。

那么,他们是如何实现的呢?该提案的一个 “关键部分 ”是用所谓的安全标准库来增强 C++ 标准库:“通过将这些组件集成到 C++ 标准库中,确保从一开始编写新代码时就考虑到安全性。“

正如他们的文档所言:”首先是大棒......Safe C++ 的开发人员被禁止编写可能在生命周期安全、类型安全或线程安全方面导致未定义行为的操作。有时,这些操作会被编译器前段禁止,例如指针运算。有时,这些操作会被编译器中段的静态分析所禁止,防止使用未初始化变量或使用已释放变量的错误,这也是安全模型所有权和借用的使能技术。其余问题,如数组下标越界,则是通过运行时 panic 和终止来解决。“

而“胡萝卜则是一整套的新功能,它们改进了不安全的特性”,包括新的模式匹配和复杂的借用检查(跟踪引用以避免出现 “释放后使用 ”漏洞的可能性)。

改进工具链

对 Baxter 来说,他一直对这个很感兴趣。早在 2019 年,他就创建了 Circle,那是一个新的 C++ 编译器。他说,只需简单地改进下工具链,它就能提供一种成熟的后继者语言所能提供的所有好处。顾名思义,这种方法与现有的 C++ 代码完全兼容。正是通过 Circle,Baxter 首次为 C++ 实现了类似 Rust 的借用检查器,即便在那时,Baxter 就已经对 C++ 代码的长远命运表现出了比较大的兴趣。

2022 年,在宣布推出新版的 Circle 时,Baxter 对那些 C++ 的诋毁者提出了质疑,称这种语言本身有缺陷 / 不安全 / 编译速度慢。“但软件做软件的事,你做你的事,只要努力,就能做出新东西。这里介绍的技术可以扩展 C++ 工具链,修复语言缺陷,使语言更加安全高效,同时与现有代码资产保持 100% 兼容。“

”C++ 将不仅仅是一种语言,它还将是一个起点,从此编程将向着更安全、更简单、更高效,同时又与现有 C++ 资产保持互操作的方向发展。“

那么,为什么不干脆让所有人都改用 Rust 呢?新的 Safe C++ 提案陈述了自己的理由。“对于职业 C++ 开发人员来说,Rust 是陌生的,再加上互操作工具的限制,要通过在 Rust 中重写关键部分来加固 C++ 应用程序很难。对于内存安全,为什么不用语言内的解决方案?为什么不能是 Safe C++ ?“

最近,Register 杂志发表的一篇 文章 回顾了历史,从 研究人员 到 微软 Azure 首席技术官 Mark Russinovich,最后甚至是 美国国家安全局 和 白宫 都曾发出过警告。Baxter 承认:"政府最近发出的有关内存安全的警告使整个科技界都在关注这个问题。“

“我做了理论研究,发现有机会利用新工具帮助 C++ 工程师编写更正确的程序,并消除与安全漏洞关系最大的一类软件缺陷"。

Profiles 有什么变化?

关于改进 C++,这并不是唯一的想法。13 个月前,在 CppCon 大会上,C++ 的创建者 Bjarne Stroustrup 就对与会者说,C++ 语言的现状是“一个机会”。他还补充说,从 C++ 语言诞生之初,类型和资源安全就一直是这门语言的目标。Stroustrup 建议用 profiles(可由编译器进行检查的安全保证规则)来改进该语言。

对于标准 C++ 基金会(由微软、谷歌和英特尔支持的非营利组织)GitHub 存储库中的 profiles,人们已经有了一些想法。该库有一个由 Bjarne Stroustrup 和 ISO C++ 标准委员会主席 Herb Sutter 共同编写的 C++ 核心指南页面。现在,该页面已经包含了对 “相关规则组”(名为 profiles)的引用,其中描述了实现类型安全和边界安全等预期结果的指导原则。

“profiles 主要是供工具使用,但也可供人类参考。我们的观点并不局限于‘Enforcement’一节,那些我们知道如何强制执行的内容;有些观点仅仅是一些愿望,或许可以为某些工具构建者带去一些启发"。

但上周四(10 月 24 日),Baxter 新发表了一篇题为 “为什么 Safety Profiles 失败了”的论文。

“Safety Profiles"于 2015 年推出,承诺检测现有 C++ 代码中所有的生命周期安全缺陷。这是一个大胆的承诺。但经过十年的努力,Profiles 未能产生规范、可靠的实现,也未能为 C++ 安全带来任何实实在在的好处。失败的原因在于其核心设计中有一些错误的前提"。

这里有我论文的草稿:
https://t.co/cfY2Vokfbr。
我试图从以下几个方面来分析生命周期安全问题:
1. 别名
2. 生命周期
3. 安全性C++ 
没有提供任何这些方面的信息。其强化安全性的尝试注定会失败。


— Sean Baxter (@seanbax)  20244 年 10 月 24

该论文继续写道,C++ 源代码 “没有足够的信息来实现内存安全......”,并建议 “将 Rust 的安全模型引入 C++”(也将改善 Rust 和 C++ 之间的互操作性)。“通过在 C++ 中扩展所有可以出现在函数声明中的 Rust 结构的表示(如 Rust 枚举、借用和生命周期、ZST、trait 等),公共词汇表类型的数量大大增加。

“C++ 可以实现内存安全,但不是通过摒弃一切有效的东西,而这正是 Safety Profiles 的作者所做的"。该论文认为,C++ 必须 “更加明确地表达别名、生命周期和安全属性等”。

合作过程

有些讨论已经在进行,而且可能会有更多的讨论。除了宣布提案外,Baxter 和 C++ 联盟还宣布,他们正在 “寻求开发人员、研究人员和其他利益相关者的反馈”,相信合作过程 “将有助于完善项目的范围,并确保它能满足 C++ 生态系统最迫切的需求”。

他们的提案指出:“有了业界的参与,我们就能解决剩余的设计问题。再过 18 个月,我们就能开发出足够强大的语言和标准库,用于主流评估。虽然 Safe C++ 是对这门语言的一个巨大的扩展,但构建新工具的成本并不高...... 我们正一起设计 Safe C++ 标准库和语言扩展。感兴趣的读者可以访问我们的 GitHub 库,了解我们的工作。“

域名“SafeCPP.org”于今年 6 月创建。现在,它会自动将所有访问者重定向到 Safe C++ 提案的 draft.html 页。

原文链接:

https://thenewstack.io/can-the-safe-c-proposal-copy-rusts-memory-safety/

推荐阅读  点击标题可跳转

1、C++训练营,来了!

2、HarmonyOS 学习资料分享(无套路免费分享)

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗

感谢你的分享,点赞,在看三  



C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论 (0)
  • 在当今竞争激烈的工业环境中,效率和响应速度已成为企业制胜的关键。为了满足这一需求,我们隆重推出宏集Panorama COOX,这是Panorama Suite中首款集成的制造执行系统(MES)产品。这一创新产品将Panorama平台升级为全面的工业4.0解决方案,融合了工业SCADA和MES技术的双重优势,帮助企业实现生产效率和运营能力的全面提升。深度融合SCADA与MES,开启工业新纪元宏集Panorama COOX的诞生,源于我们对创新和卓越运营的不懈追求。通过战略性收购法国知名MES领域专
    宏集科技 2025-03-27 13:22 179浏览
  • 在嵌入式语音系统的开发过程中,广州唯创电子推出的WT588系列语音芯片凭借其优异的音质表现和灵活的编程特性,广泛应用于智能终端、工业控制、消费电子等领域。作为该系列芯片的关键状态指示信号,BUSY引脚的设计处理直接影响着系统交互的可靠性和功能拓展性。本文将从电路原理、应用场景、设计策略三个维度,深入解析BUSY引脚的技术特性及其工程实践要点。一、BUSY引脚工作原理与信号特性1.1 电气参数电平标准:输出3.3V TTL电平(与VDD同源)驱动能力:典型值±8mA(可直接驱动LED)响应延迟:语
    广州唯创电子 2025-03-26 09:26 198浏览
  • WT588F02B是广州唯创电子推出的一款高性能语音芯片,广泛应用于智能家电、安防设备、玩具等领域。然而,在实际开发中,用户可能会遇到烧录失败的问题,导致项目进度受阻。本文将从下载连线、文件容量、线路长度三大核心因素出发,深入分析烧录失败的原因并提供系统化的解决方案。一、检查下载器与芯片的物理连接问题表现烧录时提示"连接超时"或"设备未响应",或烧录进度条卡顿后报错。原因解析接口错位:WT588F02B采用SPI/UART双模通信,若下载器引脚定义与芯片引脚未严格对应(如TXD/RXD交叉错误)
    广州唯创电子 2025-03-26 09:05 146浏览
  • 案例概况在丹麦哥本哈根,西门子工程师们成功完成了一项高安全设施的数据集成项目。他们利用宏集Cogent DataHub软件,将高安全设施内的设备和仪器与远程监控位置连接起来,让技术人员能够在不违反安全规定、不引入未经授权人员的情况下,远程操作所需设备。突破OPC 服务器的远程连接难题该项目最初看似是一个常规的 OPC 应用:目标是将高安全性设施中的冷水机(chiller)设备及其 OPC DA 服务器,与远程监控站的两套 SCADA 系统(作为 OPC DA 客户端)连接起来。然而,在实际实施过
    宏集科技 2025-03-27 13:20 109浏览
  • 长期以来,智能家居对于大众家庭而言就像空中楼阁一般,华而不实,更有甚者,还将智能家居认定为资本家的营销游戏。商家们举着“智慧家居、智慧办公”的口号,将原本价格亲民、能用几十年的家电器具包装成为了高档商品,而消费者们最终得到的却是家居设备之间缺乏互操作性、不同品牌生态之间互不兼容的碎片化体验。这种早期的生态割裂现象致使消费者们对智能家居兴趣缺失,也造就了“智能家居无用论”的刻板印象。然而,自Matter协议发布之后,“命运的齿轮”开始转动,智能家居中的生态割裂现象与品牌生态之间的隔阂正被基于IP架
    华普微HOPERF 2025-03-27 09:46 109浏览
  • 汽车导航系统市场及应用环境参照调研机构GII的研究报告中的市场预测,全球汽车导航系统市场预计将于 2030年达到472亿美元的市场规模,而2024年至2030年的年复合成长率则为可观的6.7%。汽车导航系统无疑已成为智能汽车不可或缺的重要功能之一。随着人们在日常生活中对汽车导航功能的日渐依赖,一旦出现定位不准确或地图错误等问题,就可能导致车主开错路线,平白浪费更多行车时间,不仅造成行车不便,甚或可能引发交通事故的发生。有鉴于此,如果想要提供消费者完善的使用者体验,在车辆开发阶段便针对汽车导航功能
    百佳泰测试实验室 2025-03-27 14:51 186浏览
  • ​2025年3月27日​,贞光科技授权代理品牌紫光同芯正式发布新一代汽车安全芯片T97-415E。作为T97-315E的迭代升级产品,该芯片以大容量存储、全球化合规认证、双SPI接口协同为核心突破,直击智能网联汽车"多场景安全并行"与"出口合规"两大行业痛点,助力车企抢占智能驾驶与全球化市场双赛道。行业趋势锚定:三大升级回应智能化浪潮1. 大容量存储:破解车联网多任务瓶颈随着​车机功能泛在化​(数字钥匙、OTA、T-BOX等安全服务集成),传统安全芯片面临存储资源挤占难题。T97-415E创新性
    贞光科技 2025-03-27 13:50 148浏览
  • 在智能语音产品的开发过程中,麦克风阵列的选型直接决定了用户体验的优劣。广州唯创电子提供的单麦克风与双麦克风解决方案,为不同场景下的语音交互需求提供了灵活选择。本文将深入解析两种方案的性能差异、适用场景及工程实现要点,为开发者提供系统化的设计决策依据。一、基础参数对比分析维度单麦克风方案双麦克风方案BOM成本¥1.2-2.5元¥4.8-6.5元信噪比(1m)58-62dB65-68dB拾音角度全向360°波束成形±30°功耗8mW@3.3V15mW@3.3V典型响应延迟120ms80ms二、技术原
    广州唯创电子 2025-03-27 09:23 151浏览
  • 在电子设计中,电磁兼容性(EMC)是确保设备既能抵御外部电磁干扰(EMI),又不会对自身或周围环境产生过量电磁辐射的关键。电容器、电感和磁珠作为三大核心元件,通过不同的机制协同作用,有效抑制电磁干扰。以下是其原理和应用场景的详细解析:1. 电容器:高频噪声的“吸尘器”作用原理:电容器通过“通高频、阻低频”的特性,为高频噪声提供低阻抗路径到地,形成滤波效果。例如,在电源和地之间并联电容,可吸收电源中的高频纹波和瞬态干扰。关键应用场景:电源去耦:在IC电源引脚附近放置0.1μF陶瓷电容,滤除数字电路
    时源芯微 2025-03-27 11:19 145浏览
  • 六西格玛首先是作为一个量度质量水平的指标,它代表了近乎完美的质量的水平。如果你每天都吃一个苹果,有一间水果店的老板跟你说,他们所卖的苹果,质量达到六西格玛水平,换言之,他们每卖一百万个苹果,只会有3.4个是坏的。你算了一下,发现你如果要从这个店里买到一个坏苹果,需要805年。你会还会选择其他店吗?首先发明六西格玛这个词的人——比尔·史密斯(Bill Smith)他是摩托罗拉(Motorloa)的工程师,在追求这个近乎完美的质量水平的时候,发明了一套方法模型,开始时是MAIC,后来慢慢演变成DMA
    优思学院 2025-03-27 11:47 147浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦