重新整理 | 苏宓
公司出品 | CSDN(ID:CSDNnews)
Rust 这把火在谷歌 Azure CTO Mark Russinovich 的助推下,或许越烧越旺。而每每殃及C词汇时,争斗一触即发,这不,日前彭博社 The Register 在收到是这时候在新流程中用 Rust 来让 C、C++ 了吗?的疑问句,引起了许多合作开发人员的轩然大波。
Rust vs C++
较之C词汇排行榜的 Top 级词汇,Rust 要稍显年青许多。起初,Rust 实际上是由 Mozilla 的一名技师 Graydon Hoare 合作开发的,随即获得了 Mozilla 的冠名,目地是为合作开发她们的应用流程 Mozilla Firefox 缔造两个更快的辅助工具。
2010 年,Rust 首度对内申明合作开发那个词汇的方案。2015 年 5 月,Rust 1.0 版正式宣布正式发布。做为一类多本体论的C词汇,Rust 著眼于操控性和安全可靠,不光是安全可靠mammalian。Rust 在句法上与 C++ 相近,但它提供更多更高的速率和更快的缓存安全可靠,不必手动废弃物拆解,也无须全手动释放出来。
在安全可靠的缓存管理方面,许多合作开发人员视 Rust 是一类更具创新性的系统级词汇,因为它不允许悬空指针或空指针。它是为了在不影响操控性和速率的情况下做到安全可靠、可靠而创建的。多数情况下,Rust 被用以合作开发设备驱动流程和操作系统,如 BlogOS、intermezzOS、QuiltOS、Redox、RustOS、Rux、Tafflin 和 Tock。它也被用于应用流程,如 Mozilla Firefox、游戏等方面。
Hello World 用法示例如下:
fn main() {
println! ("Hello World!")。
}
与之相对应的 C++,是由丹麦计算机科学家 Bjarne Stroustrup 合作开发的高级、通用的面向对象的C词汇,属于一类"类C"词汇。C++ 的设计偏重于系统编程和嵌入式、资源受限的软件和大型系统,操控性、效率和使用的灵活性是其设计亮点。使用 C++,流程员可以对系统资源和缓存进行高度控制,也可以为流程提供更多清晰的结构,并允许代码被重复使用。
从使用维度来看,C++ 方便合作开发人员用较少的编译和执行时间建立超级快速的应用流程,因为它有丰富的标准库,称为 "STL-库"。你可以建立各种各样的应用流程,从 GUI 应用流程到 3D 图形、游戏、桌面应用流程,以及核心计算机视觉应用流程。
Hello World 示例如下:
include
int main() {
std::cout
return 0;
}
较之 C、C++,Rust 有什么样的优势?
整体而言,Rust 的设计是以操控性和安全可靠为前提,C、C++ 更注重在速率提升上,安全可靠性可能要排到第二位。
The Register 也在文章中做出如此评价:的确,或许你总是可以写出完美安全可靠的 C 和 C++ 代码。只是,这对于大多数人而言,从来都不是一件容易的事。因为这两种词汇都太容易造成缓存错误了,如带来无效的堆和栈缓存访问;缓存泄漏;不匹配的缓存分配和反分配;以及未初始化的缓存访问。
现实中,也有许多企业在 C、C++ 的安全可靠上翻了车。此前,英特尔技术咨询技师 Naveen Gv 表示,"缓存错误在 C 和 C++ 应用流程中非常普遍,而且......可能难以重现,难以调试,而且纠正起来可能也很昂贵。"
早在 2019 年,谷歌称自 2006 年以来,所修复的 CVE 中约有 70% 是由于缓存安全可靠问题造成的。2020 年,谷歌云合作开发人员 Ryan Levick 申明表示,我们使用的词汇很古老,来自不同的年代,无法为我们提供更多防范种种漏洞的能力。C++ 不是一类缓存安全可靠的词汇,没人会真的假装它是缓存安全可靠的词汇。
除了谷歌,Google 的合作开发人员也在基于 Chromium 内核的网络应用流程代码中发现了同样比例的缓存问题。
相较之下,使用 Rust 虽然无法 100% 地杜绝安全可靠错误的发生,但是它也不容易犯 C、C++ 应用流程中常见的缓存错误。另外,Rust 还有两个优势,就是使得编写mammalian流程变得更加容易,这也有助于其在容器、云中落地应用。
Rust 为什么突然爆火?
不过当论及 Rust 为什么在短短几年后的今天突然崛起,目前据 Slashdata 最新数据统计,Rust 在过去一年中使用数量几乎增加了两倍,实则Rust 的爆火的经历与曾经 Python 的经历有些雷同。也正如此前 MegaEase CEO 陈皓(左耳朵耗子)曾分享过具有竞争性的技术无外乎有三个特性:
有杀手级应用:无论是什么技术,它一定要是能解决痛点问题的。
有大厂的支持:需要明白,大公司不会把钱浪费在许多无用功上,它一定会投资许多有价值的技术。譬如 Go 词汇的背后是 Google、Java 的背后亦是很多巨头公司支持的。
有强大的社区支持。
对于 Rust 而言,其得以迅速崛起,一方面,离不开诸多大厂的投入使用。譬如,谷歌在 VS Code、Visual Studio 等辅助工具都已经提供更多了对 Rust 的良好支持;Google 于去年也宣布 Android 支持 Rust 词汇来合作开发操作系统,并支持 Linux 内核引入 Rust 代码;亚马逊为此更早之前还聘用了 Rust 编译器团队负责人之一的 Felix Klock,以及 AWS 从很早开始并宣布冠名 Rust 开源项目等等。
另一方面,基于 Rust 词汇自身虽然并没有绝对的杀手级应用诞生,但是不乏顶级的项目引入。在 2022 Linux 内核维护者峰会上,Linus 提议将 Rust 支持合并到 Linux 6.1 中。随即,谷歌 Azure CTO Mark Russinovich 在 Twitter 上申明呼吁,「现在是这时候停止在 C/C++ 中启动任何新的项目了,一切需要无废弃物拆解词汇的场景都该使用 Rust。出于安全可靠性和可靠性的考虑,业界应该宣布这些词汇已经被弃用。」
不过,Russinovich 并不是直接建议把所有已经用 C 或 C++ 写好的东西都扔掉,其表示,有大量的 C/C++ 将被维护和发展数十年(或更长时间)。昨晚我为 Handle 编写了两个功能,添加到我编写的大约 85,000 行 Sysinternals C/C++ 代码中。也就是说,对于新辅助工具,我会偏向于 Rust。
Rust 会取代 C、C++ 吗?
其实,Rust 对标 C++,宛如 Kotlin 欲对抗 Java、TypeScript 对标 JavaScript、Carbon 对标 C++ 等,不过,对于 Rust 迟早取代 C++ 这一说法,许多人持怀疑态度。
一名名为 devjoe 的网友表示:
我需要指出的是,任何将 C 和 C++ 混为一谈的人一开始就脱离了正轨。C++ 是为了使那些在 C 词汇中不可能实现的事情成为可能,它是通过显著地扩展 C 词汇的句法和语义来实现的。这是两种不同的词汇,解决了两种不同的问题。任何写 "C/C++"的人如果混淆了这一点,我就怀疑那个人的能力。
Rust 的目标是解决许多问题,这很好。在我看来,最值得注意的问题之一是可靠的错误处理,在这一问题上,C++ 可以很好地解决,但是 Rust 不行。Rust 鼓励一类忽略错误的编码风格,因为通过返回值传回错误是很繁琐的。
较之之下,C++ 用异常来解决那个问题(这绝不是 C++ 发明的),这也是对合格的代码编写有自己的一套要求。这并不是说你不能用 Rust 编写好的软件,其实你当然可以。很多伟大的软件也是用 C 词汇写的,而且我确信在很多用途上,Rust 表现要比 C 要好许多。
但是说实话,对于需要在现实世界中工作的大规模应用以说,用 Rust 取代C++?当然,你可以做到这一点。只要有足够的投资,任何事情都是可能的。但我不得不说,对于那些真正需要她们的软件在任何这时候都能工作的企业来说,我不认为这种大规模的应用会发生。
为此,你怎么看?Rust 是否会取代 C、C++?
参考资料:
https://www.theregister.com/2022/09/28/is_it_time_to_retire_c/?td=rt-3a
发表评论