Rust最近有点忙。

前有微软CTO公开放话:“是时候用Rust取代C/C++创建新项目了!”后有Linus Torvalds表示,如无意外,Linux 6.1将初步支持Rust。

作为一门新语言,Rust近年来可谓风头正盛。

据开发者调查分析公司SlashData报告,从2021年到2022年的第一季度,Rust是使用数量增长最快的语言。而在StackOverflow相关调查中,Rust也多年蝉联最受欢迎的编程语言。另外,苹果、微软、谷歌、亚马逊、Meta 等科技巨头陆续使用Rust,无疑也加速了Rust生态的成长。

被很多人视作“C++后继者”的Rust开始越来越多地进入人们的视野。未来Rust是否会取代C++的议题也逐渐涌现,但新旧编程语言之争素来如此,只有时间才能带来终局。当下,不妨先来看一看Rust最近活跃的身影,从中也许能窥见其一路发展的履迹。

01 谷歌:兜兜转转  寻觅C++继任者

在外界看来,谷歌对Rust向来秉持非常开放的态度。

谷歌于近日推出的开源操作系统KataOS引发了一波关注。值得关注的是,出于将安全性放在首位的宗旨,KataOS专门使用Rust语言开发,并基于seL4微内核进行了构建。之所以选择Rust,谷歌方面表示,“这为其安全性提供了一个强有力的起点,因为Rust消除了entire classes错误,例如大小差一(off-by-one errors)和缓冲区溢出”。

除了在新系统开发中采用Rust编写,谷歌在去年就宣布AOSP支持使用Rust开发Android操作系统。彼时,谷歌工程师指出,C和C++中的内存安全bug是长期痼疾之一。尽管谷歌已经投入了大量的精力和资源来检测、修复、预防这类bug,内存安全bug仍然是导致稳定性问题的主因,它在Android严重安全漏洞中长期占比约70% 。相较于C和C++在内存管理方面的复杂性,Rust可以利用编译时检查(确保对象的生命周期和所有权)和运行时检查(确保内存访问有效)来保证内存安全。而且Rust在实现安全性的同时还提供了与C和C++相当的性能。

此外,在是否应将Rust代码引入Linux内核的讨论中,谷歌曾公开表示支持立场。谷歌安全博客曾发文称:“我们认为,Rust现在已经准备好加入C语言,成为实现内核的实用语言。它可以帮助我们减少特权代码中潜在的bug和安全漏洞,同时与内核也配合得很好,可以很大程度上保留其性能特性。”

可以说,谷歌对Rust一直不吝支持。但在寻找C++继任者的实验之路上,谷歌并未止步于Rust。

在今年7月举办的CPP North C++大会上,谷歌开源并发布了新型语言Carbon,并称其是C++的实验性继任者。

谷歌工程师Chandler Carruth介绍,Carbon旨在与现有的C++代码完全互操作,目标是尽可能轻松地从C++迁移到Carbon。与之相比,Rust固然在内存安全性上优势鲜明,但其可能永远无法与C++达成足够的互操作性,以致很难实现平滑迁移。

对于Carbon的出现,C++之父Bjarne Stroustrup应媒体之邀给出了直白的回应:“总有新的语言试图成为C++的继任者。我欢迎对编程语言和编程风格进行实验,但我不想引发争议。批评已建立的语言很容易,因为我们知道它们的问题,但通常很难在不产生语言规则、库和管理方面的全新问题的情况下提供替代方案。Carbon太新了,而且规范不足,以至于我无法真正做出有意义的技术评论。”

02  微软Azure:CTO力挺Rust  与C++之父隔空battle

同样是支持,相较于谷歌对Rust的态度,微软就显得激进很多。

自2004年以来,微软安全响应中心(MSRC)已对所有报告过的微软安全漏洞进行了分类,发现其年度补丁中约有70%是针对内存安全漏洞的修复程序。而造成这一结果的主要原因是Windows和大多数其他微软产品主要使用C和C++这两种memory-unsafe的语言编写。

如果能消除这些漏洞将明显提高软件安全性,同时降低漏洞修复成本。于是,微软开始探索使用诸如Rust之类的memory-safe语言作为C和C++等语言的替代方案,以此来改善应用程序的安全状况。除此之外,在Rust的启发下,微软还着手开发了自己的内存安全编程语言Project Verona。

微软对Rust前景的看好有目共睹。今年9月,微软Azure CTO Mark Russinovich的公开表态又引起了热议。

Russinovich在推特上表示:“是时候停止使用C/C++创建任何新项目了。如果你要开新项目,而且需要使用非GC语言的时候,建议使用Rust替代。出于安全和可靠的考虑,业界应该宣布弃用C/C++。”不过他也强调,并非是要用Rust完全取代C/C++写好的东西,只是“对于新工具,我会偏向Rust”。

对这一观点,Bjarne Stroustrup这次给出的回应更为“辛辣”:“人们——尤其是高管——迷恋那些承诺可以让他们的生活更轻松的新事物,这并不少见。此外,支持新事物远比解决旧工具和知名工具的已知问题更令人兴奋。不过,新语言通常需要多年时间和重大努力才能在其广泛的应用领域与成熟语言相匹配。爱好者很少看到这一点,并且他们的评论往往是片面的。”

同时,Stroustrup表示,多年来他一直致力于提高C++的安全性,现在已经可以在ISO C++中实现有保证的完美类型和内存安全。“要注意的是,包括Rust在内的每一种‘安全’语言都存在允许不安全代码的漏洞。”

03  Rust加入Linux之旅  千呼万唤始出来

Rust的迅速崛起离不开顶级的项目引入。而Linux内核何时能支持Rust一直备受瞩目。

自Rust崭露头角,许多人呼吁在Linux内核中增加Rust语言的支持,甚至还为此诞生了一个叫“Rust for Linux”的组织。

早在2020年,Linus Torvalds就回应过相关问题,他并没有否定这一提议。而在Linux Plumbers Conference 2020大会上,内核开发者们普遍达成共识:没必要将已有内核用Rust重写,应专注于可以用Rust编写的新代码。此后,Linus也一直对此持观望和开放态度。

Rust到底有没有可能成为Linux内核中除C之外的第二种官方语言呢?答案是肯定的。

不过本以为能在6.0版本看到Rust合并进内核,但最终没有实现。究其原因,主要有两个,一个是非标准的Rust扩展的处理,另一个是Rust编译器还不稳定。Linus表示自己更关心后面这个原因,因为Rust编译器的可靠性和稳定性更重要。

而今年的LPC大会举行了一个Rust相关的小型会议。会上,西部数据公司的工程师Andreas Hindborg的发表颇为引人注目,其主旨是围绕基于Rust的NVMe驱动程序。

目前Linux内核已经拥有出色的由C编写的NVMe驱动程序,不需要替换。但鉴于NVMe驱动程序的广泛使用度及其重要性,使用Rust编写的NVMe驱动程序也是一个非常有趣的尝试。基准测试结果表明,虽然Rust NVMe驱动程序仍处于早期阶段,但其已表现不俗——结果表明该Rust驱动程序能够实现与C驱动程序相当的性能。

就在LPC大会之后的2022 Linux内核维护者峰会上,Linus提议将Rust支持合并到Linux 6.1中。他表示,希望在内核中看到Rust的一个原因是鼓励新的开发者研究内核。不过他也提醒,目前“Rust只在核心基础设施使用”。不过,这对Rust和Linux来说,都将是历史性的第一步。

04  新旧语言之争  唯有时间是永远的庄家

在编程世界中,新旧语言之争历久弥新。不少人期待Rust对标C++,就像TypeScript之于JavaScript,Kotlin之于Java。

不过事实上,两者并非“你死我活”的关系。一些C++的拥趸也并非完全排斥Rust,一些鼓吹Rust的人或许也并不完全了解Rust,就像某位网友的反讽“They don't write a piece of code, but they're trying to rust everything”。

推陈出新固然是技术演进的必然,但像C++、C、Java等老牌编程语言能有如今的江山,也非一日之功。况且任何要弥补C++缺陷的语言, 都得和C++协作, 复用C++的轮子。

而今时今日,Rust说到底仍然是一门年轻的语言,或许我们可以争论Rust是否为异步编程提供了最好的模型,摆脱垃圾回收对开发人员助益如何,但要讨论它是否终将取代C++,显然为时尚早。

对于Rust,无论你是爱它还是恨它,都不能否认其崛起的速度,但未来究竟会如何,尚需时间的检验。正如微软首席工程师Nick Cameron所说,现如今Rust正处于一个良好的发展局面:受欢迎程度越来越高、贡献者越来越多,还在一些重要领域进行了应用。但在这个充满变化的时代,从一个研究项目到一个新的、快速变化的语言再过渡到一个流行的、成熟的项目,是一个困难的演变过程。

就开发人员来说,Rust可能适合也可能不适合你或你的项目,可能是也可能不是创建相关程序的最优解决方案。但至少它提供了一个新的选择,增加了更多探索和想象的路径。就像Peter Wayner在《喜欢/讨厌Rust的七个理由》一文中总结的那样:“作为一门语言,Rust很新颖,学习它可以使人的大脑得到延伸。作为程序员,它让我们有理由重新思考我们的挑战,重新制定我们的目标,并着手寻找编写现代软件的最佳方式。还有什么能比这更好呢?”

参考链接:

https://www.theregister.com/2022/10/17/google_kata_os/?td=rt-3a

https://www.theregister.com/2022/09/28/is_it_time_to_retire_c/

https://www.sohu.com/a/589872952_121124371 https://www.infoworld.com/article/3675391/7-reasons-to-love-the-rust-language-and-7-reasons-not-to.html

用Rust取代C/C++?为时尚早!相关推荐

  1. rust取代c语言就是笑话_为什么Rust打算取代C

    rust取代c语言就是笑话 Rust编程语言是Mozilla Foundation的一个雄心勃勃的项目,该语言声称是C和C ++演进的下一步. 这些语言存在多年以来,其一些基本缺陷仍未得到解决,例如分 ...

  2. Linux之父:我们不会用Rust取代C语言开发内核

    本文转载自 InfoQ 30 年前,当 Linus Torvalds 第一次发布 Linux 内核时,他还是赫尔辛基大学的一名 21 岁的学生.他宣布说:"我正在开发一个(免费的)操作系统( ...

  3. 微软计划使用 Rust 取代 C和C+

    新智元推荐 来源:InfoQ 作者:王文婧 [新智元导读]微软近日提出,未来将使用 Rust 作为 C.C++ 以及其他编程语言的替代方案,以改善应用程序的安全性的计划. 近日,微软安全响应中心(MS ...

  4. 知乎高赞:听说Rust要取代C++?

    随着近几年Rust的大火,越来越多的人开始质疑,Rust势头这么猛,是不是要取代C++?小慕认为,一门编程语言想要完全取代另一门编程语言是很难的,毕竟每一门技术都有它的专属优势和特点,总会在特别的地方 ...

  5. Rust 1.0发布一周年,发展回顾与总结

    本文为InfoQ中文站特供稿件,首发地址为: http://www.infoq.com/cn/articles/anniversary-of-the-release-of-rust-1 .如需转载,请 ...

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

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) Rust 这把火在微软 Azure CTO Mark Russinovich 的助力下,似乎越烧越旺.而每当波及编程语言时,纷争再起,这不 ...

  7. 【人工智能】人类该如何看待人工智能的“诗与远方”?

    来源:智能制造网 [导读]如今,在继传统行业的应用"钱"景爆发之后,人工智能又开启了对"诗与远方"的追逐.9月8日,华为推出了一款全新的AI诗人--" ...

  8. 2021年7月文章精选

    深入理解Linux文件系统之文件系统挂载(上) 聊聊 top 命令中的 CPU 使用率 科普:可编程网元的前世今生 计算机系统的九个伟大思想 Linux 之父:我们不会用 Rust 取代 C 语言开发 ...

  9. 2021年六月中旬推荐文章

    目录 <内存泄漏一网打尽> <coredump 瘦身风云> <面向敏捷开发团队的 7 个开源项目管理工具> <30 Years Of Linux - An I ...

最新文章

  1. 聊一聊 软件系统中的“热力学第二定律”
  2. 晶振噪声及杂散_如何判断是否需要使用分立式晶振和振荡器呢?
  3. 使用cert-manager实现Ingress https
  4. kibana操作elasticsearch:match匹配查询(最小匹配参数查询)
  5. 【机器学习算法专题(蓄力计划)】十、机器学习中必备的高等数学和线性代数基础
  6. 从零点五开始用Unity做半个2D战棋小游戏(四)
  7. 管理员以标准权限运行时
  8. 一步步编写操作系统 20 x86虚拟bochs一般用法 上
  9. 为Visual Studio 2010添加HTML5的项目模板
  10. CrossOver 12 发布,Windows 模拟器
  11. html与css重置代码,发个自己的CSS重置基础代码
  12. 【刷算法】LeetCode- 两数之和 1
  13. JavaTPoint 编程语言中文教程【翻译完成】
  14. 【I】ZF2安装 和 创建一个新项目
  15. wpf之MVVM绑定背景色
  16. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十四】
  17. jdbc c3p0 mysql_JDBC+C3P0+DBCP 基本使用
  18. 元转万元单位换算_元要以万元为单位要怎么换算
  19. win7开机后桌面变成黑色,此window副本不是正版
  20. windows系统PrintScreen键截屏

热门文章

  1. containerd使用
  2. 织梦CMS 管理员密码加解密
  3. 官宣丨“创客集结号”成功接入“广东省教育资源公共服务平台”!
  4. vue自定义动画 以及animation包在vue中的使用
  5. edis面试刁难大全
  6. 输入您的密码来连接到_【对讲机的那点事】如何为您的数字对讲机热点配置安全密码...
  7. Command line is too long. Shorten the command line via JAR manifest
  8. 关于夜神模拟器,你该了解这些
  9. 漂亮!Python实现这张动态可视化交互大屏图
  10. error C2491: 不允许 dllimport 函数 的定义