一直被人诟病学习门槛太高的Rust语言,此次公布的规划目标也极其明确,未来很有可能吸引更多的开发者学习和使用这门语言。本文将对Rust语言的特点、优劣势、使用现状等情况进行梳理,希望能够对大家有所帮助。
在最新一期的TIOBE 4月编程语言排行榜中,Rust语言位列第28名。
TIOBE 4月编程语言排行榜第1-20名
TIOBE 4月编程语言排行榜第21-30名
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的特点还是非常突出的。
特征:C在玩刀,Rust在玩跑酷
Rust的主要特征是运行速度快、内存利用率高,它没有运行时或垃圾收集器,它适合用在对性能要求高的关键的服务,它可以在嵌入式设备上运行,并且很容易与其他语言集成。在未来,Rust语言的速度快、占用内存少等特点,将使我们能够更省力的编写代码,这类语言将变得更加重要。
可靠性:Rust 丰富的类型系统和所有权模型保证了内存和线程的安全,并能够在编译时消除许多错误。
生产力:Rust 有很好的文档,提供了一个非常友好的编译器,错误信息提示非常友好。反观C和C++代码的编译器提示消息则是出了名的难以理解。如果你想学习系统编程,使用“rustc”编译器做可以让你不用担心内存安全而能够专注其他的事情。
正如一位著名的程序员曾经说过:Pascal就像穿着紧身衣,C就像在玩刀,而C++就像在玩弄燃烧的电锯。在这个比喻中,Rust就像是穿着保护装备悬挂在绳子上做跑酷运动。看起来有点可笑,但是可以用它做各种很酷的动作而不伤害自己。
效率:先抑后扬、后发制人
关于Rust的效率问题,主要从学习、运行、开发三个维度进行考量。
1、学习效率
众所周知,Rust的学习曲线陡峭,随着学习的不断深入,你会逐渐发现 Rust 之难,不在于很容易学到的语言特性,而在于:
- 实践中如何融会贯通的运用
- 遇到问题(生命周期、借用错误、自引用等)时如何迅速正确地解决
- 大量的标准库方法记忆及熟练使用,这是保证开发效率的关键
- 心智负担较重,特别是初中级阶段时
2、运行效率
得益于各种零抽象开销、深入底层的优化潜力、优质的标准库和三方库实现,Rust具备非常优秀的性能,与C语言、C++是同一个级别。
Rust还有一个极大的好处:只要按照正确的方式使用Rust,无需性能优化,就能实现非常优秀的表现。现在有不少用Rust重写的工具、平台都超过了原来用C、C++实现的版本,可以说是将老前辈拍死在沙滩上,俨然成为一种潮流。
3、开发效率
Rust的开发效率可以用先抑后扬来形容,在刚开始上手写项目时,你的开发速度将显著慢于Go、Java等语言,但等你开始熟悉标准库常用的方法,开发效率将大幅提升,甚至形成“肌肉记忆”后,开发效率将不会慢于这些语言,而且原生就能写出高质量、安全、高效的代码。
益处:个人和团队“变强”利器
对个人的好处
首先,学习Rust语言,可以使你成为更好的程序员。要学好Rust,你需要深入理解内存、堆栈、引用、变量作用域这些其它高级语言往往不会深入接触的内容,同时Rust会通过语法、编译器和clippy这些静态检查工具半帮助半强迫的让你成为更优秀的程序员,写出更好的代码。
与此同时,当你掌握了Rust,你自发性的就会想要去做一些更偏底层的工作,这些都可以帮助你更加了解操作系统、网络、性能优化等底层知识,也会间接或者直接地接触到各种算法、数据结构实现。
慢慢的,你就成为那个更好的程序员了,也是更优秀的自己。
其次,学习Rust语言,可以增加不可替代性。这里需要说明一下,语言难学,其实也有好处。一旦掌握,你将具备较强的不可替代性,而不再是一个简单的工具人角色。看看现在内卷严重的Java,工具人有多少?一个人离职,另外一个人立刻就能替补上。
事实上,这对个人和公司是一种双赢,公司收获了更优秀的程序员(不可否认的是Rust程序员普遍水平很高,毕竟都是有很好的其他语言基础、也很有追求的自驱性人才),而个人也收获了更稳定的工作环境甚至是更高的收入。
对团队的好处
客观来讲,Rust语言的代码质量其实还是相当不错的。开发者在review时并不用担心潜在的各种坑,因此可以实现快速的开发、review、merge流程。
由于Rust语言拥有强大的编译器和语言特性,其代码自然就会比其他语言更少出现Bug。同时Rust拥有非常完善的工具链、最好的包管理工具。种种因素叠加在一起,决定了Rust非常适合大型开发者团队的协作开发。
也许Rust在开发速度上不是最快的,但是从开发+维护的角度来看,这个成本绝对是各个语言中最小的之一。还有一点很重要,团队如果招到一位优秀的Rust程序员,他会带动周围的人,一起慢慢优秀(优秀的Rust程序员较好辨别,门槛低的语言就没有那么好辨别)。总之,一位优秀的程序员会给团队带来远超他薪资的潜在回报和长远收益。
相比其他语言,Rust的优势
由于篇幅有限,这里不做详细对比,只是简单介绍下Rust的优势,但也并不是说Rust就一定优于这些语言,大家可以在评论区各抒己见。
C++
与C++相比,Rust的性能相差无几,但是在安全性方面更优,特别是使用第三方库时,Rust的严格要求会让第三方库的质量明显提高。
语言本身的学习,Rust的前中期学习曲线会更陡峭,但是对于未来使用场景和生态的学习,C++会更难、更复杂。
Java
除了部分纯粹的数字计算性能,Rust的性能是全面领先于Java的,同时Rust占用内存更小,因此如果想实现同等规模的服务,Rust所需的硬件成本显然更低。
Python
性能方面Rust完胜,同时Rust对运行环境要求较低,从这两点上就基本可以做出选择了,因为Python和Rust的彼此适用面其实并不冲突。
Go
Rust语言表达能力更强,性能更高,同时线程安全方面Rust也更强,不容易写出错误的代码,包管理Rust也更好,Go虽然在1.10版本后提供了包管理,但目前还比不上Rust的。
使用现状
- 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,国内最有名的开源分布式数据库
开发者对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之外的语言操心,前十的语言足够支持人类信息社会的发展,再多这是重复造轮子而已。
写在最后
Rust是一门现代化的语言,融合了多种语言特性,且应用广泛。在学习Rust的过程中,你会发现自己编程能力的不足,改正掉这些不足就会不断提升自我。卓越的编程语言,可以将优秀的设计、先进的思想、成功的经验,自然而然地融入其中,使更多的使用者开阔眼界、拓展思路,受益无穷。
无GC、效率高、工程性强、强安全性等特点已经得到工程派和学院派的认可,这些令Rust拥有了自己的特色和生存空间,社区的友善,生态的快速发展,大公司的跟进,都预示着Rust将有一个美好未来!
客观来说,语言只是工具,我们不能神化它,但是可以给它一个机会。随着Rust语言版本的不断更迭,也许某一天你会发现它才是你的真爱!