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

来源: OSCHINA
2023-02-02 08:46:57

在美国国家安全局 (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++ 代码,该语言目前的主要用途包括航空航天、医疗仪器、人工智能/机器学习、生物医学、高能物理学等。 

展开阅读全文
点击加入讨论🔥(58) 发布并加入讨论🔥
本篇精彩评论
刀的安全性的确不比🔫更好啊,甚至比🔫更不安全(🔫起码还有个保险)。问题时当🔫和刀同时交给猴子的时候会出现什么情况?我认为C++最大的问题就是没有做好猴子测试。
2023-02-02 14:37
15
举报
这文章就证明了C系语言的没落。就像汇编的没落一样--人们需要的是更先进和更方便的编程方式,而不是语言上的改良。现在AI都可以替代一部分工作了,还在讨论语言的安全和高效,已经没意义了。C++之父还没理解人们为何抛弃C++--如同这篇文章一样,只强调自己理由而无视人们的需求--学院派或当权者经常犯的错误,已经成为他们的行为模式。
2023-02-02 12:06
6
举报
最希望消失的语言就是C++😄
2023-02-02 09:55
6
举报
虽然人人都可以随心发言,但是如果没有经历过多种硬件的底层开发,没有经历过每秒处理数十G的数据,甚至连基本的代码总数都没有写过十万行以上的,根本无法写软件是在干什么,如果这样的人,也在这个喷master级的人,就有点可笑了。
2023-02-02 21:31
5
举报
c++都没有包管理机制,这点就很落后,语法上理解相对c#,java等语言太冗余了
2023-02-02 09:05
5
举报
58 评论
10 收藏
分享
返回顶部
顶部