C++过时,Rust封神?

2022年4月22日 284点热度 0人点赞 0条评论
图片
作者 | 莫奇

近日,Rust语言设计团队Lang Team公布了Rust语言2024年的更新路线图,这也是继Rust2015、Rust2018、Rust2021之后的第四版编程语言路线图。该路线图重点提及三大规划:降低学习门槛、扩展生态系统、Rust项目扩展。


一直被人诟病学习门槛太高的Rust语言,此次公布的规划目标也极其明确,未来很有可能吸引更多的开发者学习和使用这门语言。本文将对Rust语言的特点、优劣势、使用现状等情况进行梳理,希望能够对大家有所帮助。


在最新一期的TIOBE 4月编程语言排行榜中,Rust语言位列第28名。


图片

TIOBE 4月编程语言排行榜第1-20名


图片

TIOBE 4月编程语言排行榜第21-30名



PART 01

Rust 2024路线图曝光

Rust 2024路线图包含三大目标,首先就是降低学习门槛:Lang Team 希望在新版本中能够简化程序,使开发者只需处理其领域的固有复杂性,不再需要处理Rust的意外复杂性。

针对这一愿景,该团队提出了四个目标:

  • 更精确的分析,更少的繁琐:通过改进借用检查器、类型推理等,使编译器能够更好地识别代码是否正确。识别并消除 "boilerplate" 模式,例如到处复制粘贴同一组 where。

  • 更容易、更直接地表达代码的意图:在必要时扩展语言,以便更直接地表达您希望代码执行的操作,例如通过语法糖的形式(如 let-else),或者扩展类型系统(如泛型关联类型)。

  • 改进异步支持:将 async-await 支持扩展到当前的 "MVP" 之外,如traits 中的 async fns、async drop 等特性。

  • 让 dyn Trait 更有用:拓宽可用于 dyn 的特性集,让使用 dyn 更接近于使用泛型。

其次是扩展生态系统:Lang Team 表示,有很多事情是库作者不能做的,或者不容易做的。比如他们无法控制用户看到的错误信息,或者部署一个需要特殊选择才能使用的“不稳定”特性。因此,该团队希望通过帮助管理功能的生命周期或扩展库的功能,使库作者能够更好地为用户服务。
最后是Rust项目扩展:为了尽可能使Rust发挥作用,确保Rust的质量、稳定性和整体一致性,该团队希望新版本能够及时查看状态、明确的所有者和沟通、具有工具支持的高效开放的流程。
目前距离Rust2024还为时尚早,Rust的路线图有可能随着时间的推移,不断进行优化升级。

目前来看,Rust的用户群体不断壮大,有数百家公司使用Rust进行开发,比如 Dropbox、 Yelp 和 Cloudflare。作为一门发展趋势良好的编程语言,Rust的特点还是非常突出的。
PART 02

特征:C在玩刀,Rust在玩跑酷

Rust的主要特征是运行速度快、内存利用率高,它没有运行时或垃圾收集器,它适合用在对性能要求高的关键的服务,它可以在嵌入式设备上运行,并且很容易与其他语言集成。在未来,Rust语言的速度快、占用内存少等特点,将使我们能够更省力的编写代码,这类语言将变得更加重要。
可靠性:Rust 丰富的类型系统和所有权模型保证了内存和线程的安全,并能够在编译时消除许多错误。
生产力:Rust 有很好的文档,提供了一个非常友好的编译器,错误信息提示非常友好。反观C和C++代码的编译器提示消息则是出了名的难以理解。如果你想学习系统编程,使用“rustc”编译器做可以让你不用担心内存安全而能够专注其他的事情。
正如一位著名的程序员曾经说过:Pascal就像穿着紧身衣,C就像在玩刀,而C++就像在玩弄燃烧的电锯。在这个比喻中,Rust就像是穿着保护装备悬挂在绳子上做跑酷运动。看起来有点可笑,但是可以用它做各种很酷的动作而不伤害自己。
PART 03

效率:先抑后扬、后发制人

关于Rust的效率问题,主要从学习、运行、开发三个维度进行考量。

1、学习效率

众所周知,Rust的学习曲线陡峭,随着学习的不断深入,你会逐渐发现 Rust 之难,不在于很容易学到的语言特性,而在于:
  • 实践中如何融会贯通的运用
  • 遇到问题(生命周期、借用错误、自引用等)时如何迅速正确地解决
  • 大量的标准库方法记忆及熟练使用,这是保证开发效率的关键
  • 心智负担较重,特别是初中级阶段时

2、运行效率
得益于各种零抽象开销、深入底层的优化潜力、优质的标准库和三方库实现,Rust具备非常优秀的性能,与C语言、C++是同一个级别。
Rust还有一个极大的好处:只要按照正确的方式使用Rust,无需性能优化,就能实现非常优秀的表现。现在有不少用Rust重写的工具、平台都超过了原来用C、C++实现的版本,可以说是将老前辈拍死在沙滩上,俨然成为一种潮流。
3、开发效率
Rust的开发效率可以用先抑后扬来形容,在刚开始上手写项目时,你的开发速度将显著慢于Go、Java等语言,但等你开始熟悉标准库常用的方法,开发效率将大幅提升,甚至形成“肌肉记忆”后,开发效率将不会慢于这些语言,而且原生就能写出高质量、安全、高效的代码。
PART 04

益处:个人和团队“变强”利器

1、对个人的好处

首先,学习Rust语言,可以使你成为更好的程序员。要学好Rust,你需要深入理解内存、堆栈、引用、变量作用域这些其它高级语言往往不会深入接触的内容,同时Rust会通过语法、编译器和clippy这些静态检查工具半帮助半强迫的让你成为更优秀的程序员,写出更好的代码。

与此同时,当你掌握了Rust,你自发性的就会想要去做一些更偏底层的工作,这些都可以帮助你更加了解操作系统、网络、性能优化等底层知识,也会间接或者直接地接触到各种算法、数据结构实现。

慢慢的,你就成为那个更好的程序员了,也是更优秀的自己。

其次,学习Rust语言,可以增加不可替代性。这里需要说明一下,语言难学,其实也有好处。一旦掌握,你将具备较强的不可替代性,而不再是一个简单的工具人角色。看看现在内卷严重的Java,工具人有多少?一个人离职,另外一个人立刻就能替补上。

事实上,这对个人和公司是一种双赢,公司收获了更优秀的程序员(不可否认的是Rust程序员普遍水平很高,毕竟都是有很好的其他语言基础、也很有追求的自驱性人才),而个人也收获了更稳定的工作环境甚至是更高的收入。

2、对团队的好处

客观来讲,Rust语言的代码质量其实还是相当不错的。开发者在review时并不用担心潜在的各种坑,因此可以实现快速的开发、review、merge流程。

由于Rust语言拥有强大的编译器和语言特性,其代码自然就会比其他语言更少出现Bug。同时Rust拥有非常完善的工具链、最好的包管理工具。种种因素叠加在一起,决定了Rust非常适合大型开发者团队的协作开发。

也许Rust在开发速度上不是最快的,但是从开发+维护的角度来看,这个成本绝对是各个语言中最小的之一。还有一点很重要,团队如果招到一位优秀的Rust程序员,他会带动周围的人,一起慢慢优秀(优秀的Rust程序员较好辨别,门槛低的语言就没有那么好辨别)。总之,一位优秀的程序员会给团队带来远超他薪资的潜在回报和长远收益。

PART 05

相比其他语言,Rust的优势

由于篇幅有限,这里不做详细对比,只是简单介绍下Rust的优势,但也并不是说Rust就一定优于这些语言,大家可以在评论区各抒己见。
1、C++
与C++相比,Rust的性能相差无几,但是在安全性方面更优,特别是使用第三方库时,Rust的严格要求会让第三方库的质量明显提高。

语言本身的学习,Rust的前中期学习曲线会更陡峭,但是对于未来使用场景和生态的学习,C++会更难、更复杂。

2、Java

除了部分纯粹的数字计算性能,Rust的性能是全面领先于Java的,同时Rust占用内存更小,因此如果想实现同等规模的服务,Rust所需的硬件成本显然更低。

3、Python

性能方面Rust完胜,同时Rust对运行环境要求较低,从这两点上就基本可以做出选择了,因为Python和Rust的彼此适用面其实并不冲突。
4、Go
Rust语言表达能力更强,性能更高,同时线程安全方面Rust也更强,不容易写出错误的代码,包管理Rust也更好,Go虽然在1.10版本后提供了包管理,但目前还比不上Rust的。

PART 06

 使用现状 

  • AWS从2017年开始就用Rust实现了无服务器计算平台:AWS Lambda 和 AWS Fargate, 并且用Rust重写了Bottlerocket OS和AWS Nitro系统,这两个是弹性计算云(EC2)的重要服务

  • Cloudflare是Rust的重度用户,DNS、无服务计算、网络包监控等基础设施都与Rust密不可分

  • Dropbox的底层存储服务完全由Rust重写,达到了数万PB的规模

  • Google除了在安卓系统的部分模块中使用Rust外,还在它最新的操作系统fuchsia中重度使用Rust

  • acebook使用Rust来增强自己的网页端、移动端和API服务的性能,同时还写了Hack编程语言的虚拟机

  • Microsoft使用Rust为Azure平台提供一些组件,其中包括IoT的核心服务

  • Github和npmjs.com,使用Rust提供高达每天13亿次的npm包下载

  • Rust目前已经成为全世界区块链平台的首选开发语言

  • Tidb,国内最有名的开源分布式数据库

PART 07

开发者对Rust的评价

@Graydon Hoare:Rust 是一种采用过去的知识解决将来的问题的技术。
@Elon Musk:我是 Rust 粉丝,但我选择 C/C++。
@wenq1:给高手增加了自律的工具,给小白降低了造坑的几率,给招聘增加了难度,给装X增加了谈资。
@beeplin:Rust 前途无量,将来凡是有内存的机器上一点都会跑Rust。因为上世纪七十年代 Joan Baez 女神就预言过:We both know what memories can bring, it can bring diamonds and rust.

女神顺便还预言了 Rust 一定是免费的,因为:If you offer me diamonds and rust, I have already paid.

顺便问一下,另一个 Diamonds 语言现在发明出来没?期待......
@徐辰:Rust特别适合用来重写那些让你不爽的项目,给你换个姿势再不爽一次的机会。
@feixu:编程语言多的是,没必要为了一个排名10之外的语言操心,前十的语言足够支持人类信息社会的发展,再多这是重复造轮子而已。

PART 08

 写在最后 

Rust是一门现代化的语言,融合了多种语言特性,且应用广泛。在学习Rust的过程中,你会发现自己编程能力的不足,改正掉这些不足就会不断提升自我。卓越的编程语言,可以将优秀的设计、先进的思想、成功的经验,自然而然地融入其中,使更多的使用者开阔眼界、拓展思路,受益无穷。
无GC、效率高、工程性强、强安全性等特点已经得到工程派和学院派的认可,这些令Rust拥有了自己的特色和生存空间,社区的友善,生态的快速发展,大公司的跟进,都预示着Rust将有一个美好未来!
客观来说,语言只是工具,我们不能神化它,但是可以给它一个机会。随着Rust语言版本的不断更迭,也许某一天你会发现它才是你的真爱。

图片

57920C++过时,Rust封神?

这个人很懒,什么都没留下

文章评论