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

程序员的店小二 程序员的店小二     2023-02-19     561

关键词:

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

相关链接:

rust入坑指南之ownership

...核的创始人,对Rust的评价是:“Rust的主要优点是代码的安全性和速度,很难在C++中实现这种安全性,而且Rust编译器会捕获很多C++难以发现的错误”。BrianKernighan:C语言的创始人之一,对Rust的评价是:“Rust是一门非常强大的程... 查看详情

rust:一个不再有c/c++的,实现安全实时软件的未来

https://www.infoq.cn/article/dgKDBiPl7KID0dyaE7Wl?utm_source=related_read&utm_medium=articleRust 作为新兴编程语言深受Haskell和OCaml等函数式编程语言的影响,使得它在语法上与C++类似,但在语义上则完全不同。Rust是静态类型语言,同时具有完... 查看详情

为啥 Rust 认为泄漏内存是安全的?

】为啥Rust认为泄漏内存是安全的?【英文标题】:WhydoesRustconsideritsafetoleakmemory?为什么Rust认为泄漏内存是安全的?【发布时间】:2019-09-3002:49:20【问题描述】:根据thischapterintheRustBook,有可能通过创建指针循环来泄漏内存:Rust... 查看详情

rust初识及rust的esapi(代码片段)

...供更好的内存安全。Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言[10],适用于大型场景,即创造维护能够保持大 查看详情

2023年rust发展如何?

1.引言Rust是一种系统编程语言,它注重安全、并发和内存效率。自2010年首次发布以来,Rust一直在快速发展,吸引了越来越多的开发者加入其社区。Rust语言的设计目标是提供一种安全、并发和实用的语言,它可以满足系统编程的... 查看详情

rust的“并发安全”设计

...模型,但它从语言层面上提供了一整套机制来保证并发的安全,借助这套机制,你可以安全的实现很多并发模型,如消息传递式、共享状态式、无锁式和纯函数式。昨天晚上我在群里和人讨论有关设计的 查看详情

rust编程语言入门之高级特性(代码片段)

...不安全Rust匹配命名变量隐藏着第二个语言,它没有强制内存安全保证:UnsafeRust(不安全的Rust)和普通的Rust一样,但提供了额外的“超能力”UnsafeRust存在的原因:静态分析是保守的。使用UnsafeRust:我知道自己在做什么,并承担... 查看详情

rust学习内存安全探秘:变量的所有权引用与借用

...的语言。Rust语言具备如下特性:•高性能-Rust速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。•可靠性-Rust丰富的类型系统... 查看详情

rust编程语言入门(代码片段)

...程语言,但是它更善于以下场景:需要运行时的速度需要内存安全更好的利用多处理器与其他语言比较C/C++性能非常好,但类型系统和内存都不太安全。Java/C#,拥有GC,能保证内存安全,也有很多优秀特性,但是性能不行。Rust:... 查看详情

谷歌:使用rust后,安卓系统的内存安全漏洞数量大幅下降(代码片段)

...章中表示,软件公司和国家安全局督促开发人员转向内存安全编程语言,以消除高危缺陷的一个主要来源。原文链接:https://www.darkreading.com/application-security/shift-memory-safe-languages-gains-momentum译者|禾木木出品|CSDN(ID&... 查看详情

rust为什么我建议你学一下rust|rust初探(代码片段)

...点Rust是一种多范式、通用编程语言,旨在提高性能和安全性,尤其是安全并发性。Rust在语法上类似于C++,但可以通过使用借用检查器来验证引用来保证内存安全。Rust在没有垃圾收集的情况下实现了内存安全... 查看详情

rustvspython:为啥越来越流行,取代榜一python?

...和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。Rust最初是由Mozilla研究院的GraydonHoare设计创造,然后在DaveHerman,BrendanEich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎... 查看详情

rust内存安全--借用(代码片段)

rust的内存安全在编译期间就可以被检查出来。关于借用,总结一句话是“共享不可变,可变不共享”譬如这段代码,是可以通过编译的fnmain()leti=1;letp1=&i;letp2=&i;println!("",i,p1,p2);虽然发送了共享... 查看详情

为什么我相信使用c语言可以保证内存安全?(代码片段)

...Nnews)最近,美国国家安全局发布了一些关于软件内存安全的建议(https://media.de 查看详情

为什么我相信使用c语言可以保证内存安全?(代码片段)

...Nnews)最近,美国国家安全局发布了一些关于软件内存安全的建议(https://media.de 查看详情

rust备忘清单_开发速查表分享

...和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。Rust最初是由Mozilla研究院的GraydonHoare设计创造,然后在DaveHerman,BrendanEich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎... 查看详情

rust语言的多线程编程

...的的核,但喝多程序员没有准备好充分利用它们。Rust的内存安全特性也应用于并发。Rust程序必须内存安全,没有数据竞争。Rust的类型系统很胜任这工作,很容易让你理解在编译时的并行代码。在谈论Rust并发特色之前,了解一... 查看详情

rust运行时指南(官方文档翻译)(代码片段)

...,包括内核(kernel)环境。Rust语言也不需要运行时提供内存安全,因为它的类型系统本身已经足够安全——通过编译时静态验证给予保证。运行时只是利用语言的安全特性提供一系列便利的、安全的、高层的抽象。如果Rus... 查看详情