首页 > 自考资讯 > 高考百科

C++的内存安全之路:向左走,向右走?,c++内存区

小条 2024-09-23

当前,随着科学技术的快速发展,编程语言的安全性越来越受到人们的关注。昨天C++社区宣布一项革命性提案的消息,就像一块巨石投入平静的湖面,激起万千波澜。

C++ 和C 语言一直是白宫批评的对象,出于对内存安全的担忧,白宫在2 月份呼吁开发人员停止使用这些语言。 C++ 创始人Bjarne Stroustrup 的回应是捍卫该语言。安全C++ 扩展提案旨在扭转C++ 的趋势。 Falco 表示,该计划的一个关键组成部分是一个安全标准库,它为开发人员提供基本数据结构和算法的内存安全实现。

6bdbdc36d4144ba28754caa5e76f6e5a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1727642466&x-signature=jQb8IC2grdOBZ4a0nO%2FQkHIWmkw%3D 内存安全:迫切需要

近年来,各种安全漏洞频频出现,对软件安全的需求不断增加。许多私营和公共部门组织开始鼓励开发人员使用内存安全语言,例如C#、Go、Java、Python 和Swift。在此背景下,C++作为一种广泛使用的编程语言,其内存安全问题日益凸显。

软件工程师Alex Gaynor 在2019 年指出,大型代码库中最严重的漏洞源于缓冲区溢出和释放后使用等内存安全缺陷。数据多次表明,在项目中使用非内存安全语言(例如C 和C++)会存在许多安全漏洞。内存安全问题正迅速成为学术论文和技术会议上的热门话题。 2022 年9 月,微软Azure 首席技术官Mark Russinovich 呼吁开发人员放弃C 和C++,转向Rust。几个月后,美国国家安全局也采取了类似的立场。到2023年,内存安全将成为主流话题。

面对这种情况,C++阵营不得不做出反应。 C++ 语言的创建者Bjarne Stroustrup 两年前回应了Russinovich 的呼吁,他说:“ISO C++ 现在提供了完整的类型和内存安全保证。”有人对此表示怀疑。互联网安全研究小组联合创始人兼执行董事Josh Aas 表示,虽然理论上可以编写内存安全的C++ 代码,但现实情况是C++ 中尚未充分考虑内存安全的设计。实现这一目标将是困难的。项目的开始。

安全C++ 扩展提案的到来旨在解决这些批评并解决美国国家安全局和其他机构为各个公共部门提出的内存安全要求。该提案的目标是解决C++ 编程语言中的一个关键弱点,并使C++ 免受内存安全漏洞的影响。 C++联盟**兼执行董事Vinnie Falco也强调了这一提案的革命性重要性,认为它为C++带来了内存安全功能,代表了C++生态系统的一个重要里程碑。

向Rust 学习:争议和挑战

安全C++ 扩展提案将利用Rust 的许多功能来确保代码正确性,包括借用检查和初始化分析等机制。此举引发社会争议。一些开发人员对大量借鉴Rust 表示担忧,认为C++ 可能会失去其独特性。

cd512bc747854d4fab68b6a8425ba267~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1727642466&x-signature=wbVnnq6t5UTls6O5XlnCsJKIHL0%3D James20k 是一位拥有20 多年经验的高级C++ 开发人员,他表示该提议是基于现实世界的需求,虽然是可选的,但它对C++ 语言的改变可能比我指出的C++11 更大。确实有。他希望C++ 能够以自己的方式对其进行改进,而不是复制Rust。社区中的一些技术人员反对借用Rust 的内容。他们担心C++ 会成为某种奇怪的Rust 混合体,失去C++ 的自由和主要卖点。

然而,C++ 联盟开发人员Sean Gaxter 和Christian Mazakas 表示,当前行业对内存安全编程语言的需求如此之高,以至于我认为将C++ 代码迁移到Rust 会带来很多问题。 Rust 缺乏函数重载、模板、继承和异常机制,而C++ 缺乏功能、重定位和借用检查。这些差异导致两种语言在对接时不一致,并且大多数用于跨语言绑定的代码生成器无法使用一种语言的特征来表达另一种语言的特征。

此外,强迫高级C++ 程序员学习Rust 并不是一个理想的解决方案。由于用另一种编程语言重写项目的成本很高,因此安全C++ 的目标是以较低的成本实现与Rust 相同的健全性保证,从而降低内存安全的进入门槛。

C++ 和Rust 之间的“信仰之战”

C++ 和Rust 之间的竞争引发了一场“信仰之战”。一些开发人员认为,C++ 要么会朝这个方向发展,要么会输给Rust 而消亡。这种观点反映了编程语言之间的竞争往往过于情绪化。 Linux 开发者Linus Torvalds 表示,Rust 引发的争议现在已经“提升到带有宗教战争色彩的信仰之战的程度”。

托瓦尔兹强调,他并不反对辩论,因为我们讨论得越多,真相就越会浮出水面。 Rust 的伟大之处之一是它可以激发一些讨论,但它也可以使许多讨论变得非常激烈。 C 学派和Rust 学派有很大的区别。有些人不喜欢Rust 提出的概念,有些人不喜欢Rust 如何侵犯他们的领域。许多人甚至认为Rust 的集成路径是失败的。

C 和Rust 各有各的长处。 Rust 的支持者提出了许多强有力的论据,例如能够编译和通过可以确保代码质量并增加通用性。 C语言学派认为C更容易学习,在过去几十年的开发应用中积累了巨大的生态财富,更适合以内核为中心的eBPF开发。

随着安全C++ 扩展提案的出现,C++ 正处于十字路口。另一方面,内存安全问题需要快速解决,借用Rust 的功能可能是一个有效的解决方案。另一方面,过多借鉴Rust 可能会降低C++ 的独特性,并导致开发人员感到沮丧。

在这个关键时刻,C++必须找到平衡的方法。必须在保留内存安全的特点和优点的同时解决内存安全问题。这就需要C++社区共同努力,深入讨论并权衡各种选择的利弊。

安全C++扩展提案为C++未来的发展提供了新的方向,但最终的决定还需要C++社区的集体努力。在此过程中,C++必须保持其独特的特性和优势,同时积极解决内存安全问题,为开发者提供更安全、更高效的编程工具。只有这样,C++才能在未来的技术发展中继续发挥重要作用。

参考链接:

https://baijiahao.baidu.com/s?id=1810519550600723383wfr=spiderfor=pc

https://cppalliance.org/vinnie/2024/09/12/Safe-Cpp-Partnership.html

https://safecpp.org/P3390R0.html

https://www.youtube.com/watch?v=OM_8UOPFpqEt=510s

https://thenewstack.io/linus-torvalds-c-vs-rust-debate-has-religious-undertones/

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢