C++ 之父:Rust 等内存安全语言的安全性并不优于 C++


在美国国家安全局 (NSA) 建议组织从 C/C++ 切换到内存安全语言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回应称,在他看来,NSA 报告中提到的“安全”编程语言在重要应用程序中实际上并不优于 C++。

Bjarne 指出,NSA 的这一判定忽略了 C/C++ 三十多年来的进步;且许多 C++ 的用例也停留在遥远的过去而忽视了改进,其中就包括极大地提高安全性的方法。

现在,如果我认为这些"安全"语言中的任何一种在我关心的使用范围内都比 C++ 优越,我就不会认为 C/C++ 的淡出是一件坏事,但事实并非如此。另外,正如所描述的那样,"安全"仅限于内存安全,而忽略了一种语言可能(并且将会)被用来违反某种形式的安全和保障的十几种其他方式。

Bjarne 表示,自己几十年来一直致力于实现更好、更安全、更高效的 C++。特别是关于 C++ Core Guidelines 的工作,旨在为有需要的人提供静态保证的类型安全和资源安全的 C++。符合 C++ Core Guidelines 的良好静态分析器可以为 C++ 代码安全提供必要的保证,且比升级到更新的安全编程语言要简单得多。

他批评 NSA 的报告只关注内存处理问题,而忽略了许多其他影响项目安全性和可靠性的编程语言问题。并建议使用代码注释和编译器选项来控制规则的包含,以确保类型和资源得到安全处理。考虑到可能对项目造成的破坏,他保证 C++ 社区不会忽视安全问题,但只关注安全问题也不行。因此他计划列出一份可被视为安全问题(包括 UB)的问题清单,并找到预防这些问题的方法。

此外,Bjarne 在与日前 InfoWorld 的邮件沟通中补充道,“太多人谈论神话般的 C/C++ 语言,但转头却去关注 C 部分的弱点。许多这些弱点在 C++ 中是可以避免的,通常可以通过编写更高效的代码来更直接地表达程序员的意图”。

邮件中 Bjarne 也分享了他对安全的定义:目标是类型和资源安全,即每个对象都根据其类型使用,没有资源泄漏。对于 C++,这意味着一些运行时范围检查,消除通过悬空指针的访问,并避免误用强制转换和联合。C++ 提供 high-level 工具,例如容器、span、range-for 循环和变体,它们可以在不损害生产力或效率的情况下提供保证。关于 NSA 引用的所谓安全语言,Bjarne 则表示,所有这些语言都容易受到未经静态验证的代码的攻击。此外,每个系统都必须使用硬件,而有效的硬件访问很少是安全的。

Bjarne 还概述了他安全使用 C++ 的策略:

  • 静态分析以验证没有不安全的代码被执行。
  • 简化代码的编码规则,使工业规模的静态分析可行。
  • 使此类简化代码相当容易编写并确保在需要时进行运行时检查的库。

目前共存在数百万 C++ 程序员和数十亿行 C++ 代码,该语言目前的主要用途包括航空航天、医疗仪器、人工智能/机器学习、生物医学、高能物理学等。 


相關推薦

2024-03-21

易受攻击的语言,以减少内存安全漏洞的数量来提高软件安全性。 C++ 之父 Bjarne Stroustrup 在日前与 InfoWorld 的采访中针对白宫的这些言论进行了反驳。“我感到惊讶的是,这些政府文件的作者似乎对当代 C++ 的优势和提供强大安

2022-07-27

避免的在 C++ 社区中引发了很多讨论,同时也引来了 C++ 之父 Bjarne Stroustrup 的回应。 在被外媒问及 Carbon 的的可行性时,Bjarne 回答称: “总是有新的语言试图成为 C++ 的继承者。我欢迎对编程语言和编程风格的实验,但并

2022-09-22

们的评论往往是相当片面的”。 Stroustrup 表示,考虑到安全性的重要程度,多年来他一直在致力于提高 C++ 的安全性;从而现在在 ISO C++ 中实现了可靠的完美类型和内存安全。也就是说,每个对象都根据它定义的类型来使用;

2022-03-24

lla 最初的计划是用 Rust 来完全重写 Firefox 的 C++ 代码,以安全性较高的 Rust 取代 C++ 。但由于疫情原因,Mozilla 在 2020 年的裁员中把 Rust 团队和大部分 Rust 核心开发者给裁员了。而后 Rust 项目宣布独立并,而 Servo 引擎。 因此 Mozi

2022-11-13

。尽管这些包含内存不安全机制的方法颠覆了固有的内存安全性,但它们有助于定位可能存在内存问题的位置,从而可以对这些代码部分进行额外的审查。” 另一方面,一些内存安全语言可能会以性能为代价。此外,学习一门

2023-08-29

8 月 26 日「源创会」北京站,聊聊 AI 大模型与底层技术 >>> 1985 年,Bjarne Stroustrup 首次发布 C++ 编程语言;38 年后的今天,他在与 Honeypot.io 平台的简短采访中提出了自己的一些人生建议。并调笑称,“提供建议很难,至少和接

2023-04-29

们认为该语言是一种在代码到达用户手中之前捕获和消除内存安全漏洞的方法。现如今,随着谷歌等竞争对手都在大力拥抱 Rust,微软对 Rust 的探索也变得更加热情。去年 9 月,微软 Azure 首席技术官 Mark Russinovich 还曾在社交平台

2023-02-08

编程学习工具,在中小学中很流行;Rust 则是面向专家的安全高性能编程语言,两者服务于不同的目的。 排名前 4 的语言也是如此。 Python 非常适合数据挖掘、AI 编程、统计程序、研究项目、网站、小型粘合程序和学习如何编

2022-06-01

后总结称,C++ 可以编写出高性能应用程序,但需要付出安全性方面的代价。Hardware memory tagging 可以修复 C++ 的一些安全缺陷,同时保持高性能。“我们期待在未来看到更广泛地采用 Hardware memory tagging,并建议在 Hardware memory tagging

2022-11-14

:前面提到的与流行的现有语言的互操作性;任何增加的安全相关功能的可用性;以及与流行框架或项目的关联。TypeScript 有幸兼备了所有的这些,“目前几乎没有迹象表明该语言除了向上发展外还会有其他任何方向,唯一真正

2023-01-14

少的设计文档,更少的安全审查),并提高 Chrome 的安全性(增加没有内存安全错误的代码行数,降低代码的错误密度)。他们认为可以使用第三方 Rust 库来实现这一目标。 他们还说道,Rust 是由 Mozilla 开发的编程语言,

2023-11-15

单、易用,能快速完成任务。Go 深受 C 语言的影响,但在内存安全、垃圾收集和结构类型方面也有重大改进。 平均工资:~$130k 薪资中位数:$128k 发现的工作数量(带薪水):1.2K 个 查看具体的 Go 职位。 6 - Ruby Rub

2022-09-30

sson 认为,Rust 的主要优势包括:不必考虑 race conditions 和内存损坏,以及一般的内存安全。“你知道,从一开始就可以编写正确且健壮的代码。所以这基本上是我的第一印象,但现在我也开始意识到还有很多其他方面的优点”。

2023-08-28

8 月 26 日「源创会」北京站,聊聊 AI 大模型与底层技术 >>> Modular AI 公司近日宣布成功融资 1 亿美元,这是继去年 3000 万美元融资之后的第二轮融资。 Modular AI 是 Chris Lattner 和 Tim Davis 于 2022 年创立的公司,目标是自下而