C、C++ 将退休,Rust 欲上位?

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

Rust 这把火在微软 Azure CTO Mark Russinovich 的助力下,似乎越烧越旺。而每当波及编程语言时,纷争再起,这不,近日外媒 The Register 在发出“是时候在新程序中用 Rust 来让 C、C++ 了吗?”的问句,引发了不少开发者的热议。

Rust vs C++

相比编程语言榜单的 Top 级语言,Rust 要稍显年轻一些。最初,Rust 仅仅是由 Mozilla 的一位工程师 Graydon Hoare 开发的,随后得到了 Mozilla 的赞助,目的是为开发他们的浏览器 Mozilla Firefox 创造一个更好的工具。

2010 年,Rust 首次对外公开开发这个语言的计划。2015 年 5 月,Rust 1.0 版本正式发布。作为一种多范式的编程语言,Rust 专注于性能和安全,特别是安全并发。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++ 方便开发者用较少的编译和执行时间建立超级快速的应用程序,因为它有丰富的标准库,称为 "STL-库"。你可以建立各种各样的应用程序,从 GUI 应用程序到 3D 图形、游戏、桌面应用程序,以及核心计算机视觉应用程序。

Hello World 示例如下:

#include <iostream>

int main {

std::cout << "Hello, world!";

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 还有一个优势,就是使得编写并发程序变得更加容易,这也有助于其在容器、云中落地应用。

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

原文地址:https://www.toutiao.com/article/7150104200268284446/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340