Rust为什么叫好不叫座?
放眼编程语言界,新旧势力的交替历来暗潮涌动又动人心弦。而在最近两年,Rust的表现不可谓不抢眼。
根据SlashData 2021年开发者报告显示,使用Rust编程的开发人员在过去24个月内增长了两倍,达到了220万。过去C/C++、Java等是大厂的常用语言,而如今,字节跳动、亚马逊、谷歌、苹果均已经用上了Rust语言,这意味着学好Rust语言就有机会找到高薪工作。
不过,也有人认为Rust学习门槛高,戏言“Rust的语法有点反人类”。那么事实到底如何呢?
“当红炸子鸡”Rust:高效、安全但难学
Rust最初由Mozilla员工Graydon Hoare在2006年设计和发布,目前由Mozilla团队和一众开源社区成员共同开发和维护。
Rust能火,并非偶然。Graydon Hoare曾形容:“Rust是一种采用过去的知识解决将来的问题的技术。”站在前人的肩膀上,Rust很大程度上解决了很多其他编程语言的痛点。
首先,Rust发挥了静态语言的优势。相较动态语言在调试和运行时的不确定性,静态类型的语言允许对数据及其行为预先进行编译器级别的检查和约束,在运行时只保留少量的类型检查,这极大地避免了程序员的麻烦,同时有益于鼓励长期的可维护性。
其次,Rust解决了并发条件下的数据竞争问题,让并发更容易。当两个线程同时访问同一内存时会发生数据竞争,这就可能导致某些不可预测的行为。Rust从编译阶段就将数据竞争解决在了萌芽状态,保障了线程安全。用户可以用库的形式实现各种高效且安全的并发编程模型,进而充分利用多核时代的硬件性能。
再者,Rust做到了更好的内存安全特性。在内存管理上,常见的方式有两种:要么如Java、Python一样使用垃圾回收算法,要么像C++一样手工管理内存。但垃圾自动回收必然影响性能,手工管理内存则可能会出现内存泄漏和悬停指针之类的问题。Rust不同,其所有权系统在编译时就分析程序的内存管理,而且没有额外的运行时开销。这种无垃圾回收器的内存安全机制是Rust经典且核心的设计之一。
还有,作为系统级编程语言,Rust的基本理念是 “零成本抽象”。这一理念让Rust具备高级语言表达能力的同时,又不会带来性能损耗。与其他系统级编程语言(如C或C++)相比,Rust不需要程序员将所有时间都花在细节上,而是通过添加更高层次的编程概念,确保使用的抽象几乎没有运行时开销,这种抽象与等效的手写代码具有同等的性能。
总的来说,在性能上,Rust内存利用率极高,能够胜任对性能要求特别高的服务;在安全性上,Rust丰富的类型系统和所有权模型保证了内存安全和线程安全,在编译期就能够有效阻断各种错误的产生。
有着如此表现的Rust虽然还是编程语言界的“小鲜肉”,却迅速收获了开发者们的青睐。根据Stack Overflow 2021年开发者调查报告,Rust连续六年成为最受开发者喜爱的编程语言。
不过,“最受喜爱”并不等于“最想使用”。
尽管口碑好、人气高,但Rust的学习成本高几乎是众所周知的。在官方的多次调查中,不少开发者提到需要降低学习门槛,让Rust更容易被学习。2021年Rust Survey调查中,有47.41%的受访者认为采用Rust很有挑战性,仅有17.14%认为挑战性不大。
图源:互联网
可以说,除了部分具备一定的C/C++经验的开发者在使用Rust时会容易一点,很多人会因为“太难上手”而对Rust望而生畏。
Rust对决C++:以卵击石还是后生可畏
Rust到底值不值得花功夫去上手?我们可以从它与其他语言的比较中一窥端倪。
Rust常常被认为是C++的竞争语言,但这种说法也会被一些C++拥护者吐槽为“碰瓷”。不可否认,Rust很受欢迎,且颇有后劲,但目前来说,C++的主导地位依旧不可动摇。宏观来看,C++拥有更大的社区、更广泛的用例,并且在实战中得到了绝大多数企业的认可。但另一方面,Rust在安全性上表现更优,没有C++那么重的历史包袱,作为新生力量潜力更大,等生态更加丰富后可能会更有作为。
内存安全:同为系统级编程语言,C++为了保持速度,没有走内置垃圾回收机制的路子,将内存安全问题留给了开发人员。而Rust通过其所有权系统全面强制并提高了其内存安全性,基本消除了手动内存管理的需要。
智能指针:Rust和C++语言都广泛支持指针,在两种语言中,首选都是智能指针。Rust标准库提供了几种与C++类似的智能指针,如Box相当于C++中的std::unique_ptr;Rc相当于C++中的std::shared_ptr。
框架和库:Rust和C++都有大量的框架和库可以使用。尽管发展时长差距较大,但Rust目前已经有大量库可供网页开发、游戏开发、区块链等使用。而
C++库主要是标准库,是类和函数的集合。两种语言都有大量活跃的贡献者。
包管理和工具:Rust的官方包管理器是Cargo,就普遍反馈来说比较好用、很有竞争力。而C++在包管理方面也有Conan之类的工具,发展也不错。两者使用体验如何见仁见智。
并发性:两种语言在并发中表现均很稳健。但在线程安全方面,面对数据竞争这种难以定位的并发漏洞类型,Rust的内存安全特性更有助于预防这类问题的发生。不过,对自身代码非常自信的程序员可能会觉得,Rust在实现多线程应用时过于束缚。
社区支持:C++有C++标准委员会的领导,而Rust也有Rust基金会的支持。两种语言的社区都很活跃。不过因为C++发展时间要长得多,生态上肯定要比Rust成熟很多,受众基础也要大得多。
归根结底,所有语言都是工具,真正使用时都要因地制宜。作为一门优缺点都极为鲜明的语言,Rust在实战中表现如何仍需要开发者的亲手验证。有位C++程序员的评价或许可以给我们更多启发:
“虽然Rust定位于一门系统级编程语言,但它并没走C++兼容C的老路,完全没有历史的包袱,可以轻装上阵,充分吸收各家编程语言之长,避其之短。Rust有完全不亚于C++的表达能力和性能,又解决了C++的最大痛点(内存安全、线程安全),这对C++程序员来讲无疑是非常有吸引力的。目前,C++仍然是我的主力编程语言,但我对Rust是看好的。它不仅实用,反过来也会促进对C++中关键概念和问题的理解。”
前景:Rust会登顶吗?
在代码江湖,编程语言总是呈现出“江山代有才人出”的态势。Rust作为一门年轻的语言,面向一众老前辈,也展示出了作为后起之秀的锐气和野心。
在今年上半年, Rust语言设计团队(Lang Team)在官方博客中公布了Rust语言2024年的更新路线图。这张路线图昭示了Rust语言的未来发展方向。其重点有三:
一是努力拉平陡峭的学习曲线。面向Rust学习门槛高的问题,Lang Team力图通过各种手段简化程序,使开发者能更轻松地表达代码意图,而不需要处理逻辑实现的各种细枝末节。
二是让Rust库的生态系统更加轻松协调。Lang Team希望通过帮助管理功能生命周期,扩展库的功能,以及增强互操作性,使库的作者能够更好地服务于他们的用户。
三是进一步扩大Rust项目规模。为更有效地推进Rust发展,Lang Team希望让开发者能对团队的现存问题、工作状况一目了然,并对他们可以如何提供帮助更加清晰,使开发人员能够积极参与推动他们热衷的工作。
不过,对于Rust的前景,依旧众说纷纭。
有人说,Rust可能还是干不过老语言,终究难逃昙花一现的命运;
也有人说,Rust可能在Web应用开发、嵌入式设备开发等领域另辟洞天、大有作为;
还有人说,Rust也许会吞下C++大部分应用场景,在漫长的发展期后完成登顶……
而对于程序员是否要学Rust,支持和反对阵营也同样各执己见。
支持者给出的理由,主要集中在以下几点:
Rust站在巨人的肩膀上,也确实解决了C++的部分问题,很好地平衡了性能和开发效率。
一些企业,尤其是大型公司,已经在使用Rust或正计划使用Rust。以后对于Rust开发者的需求会持续上升,而且可以预见薪酬很可观。
作为一门年轻的语言,Rust的领域还没那么卷。抓住这个时机就有望成为这片“新大陆”的掘金者。
反对者则认为:
从职业发展考虑,对萌新来说,学习Rust得不偿失。因为Rust目前还是一门小众语言,将来会发展成什么样均未可知。而其他更为成熟的语言,掌握之后在实践中已经可以满足大部分业务需求。
Rust的学习门槛决定了,有能力钻研其语法的程序员,用别的语言也很少会犯Rust想要从根源上杜绝的"低级错误";而对于基础薄弱、编程思维混乱的程序员,很少能学进去Rust。这个矛盾就让Rust有点“不上不下”。
程序真正面向的是人,而不是机器。语法简单、易于理解、减少程序员的心智负担才应该是编程语言未来的发展方向。Rust显然不符合这一点。
回顾这些论点,可以发现,其实作为局中人,要预判一门语言的发展是很难的,因为没有人可以窥见其发展全貌。而且每门语言的发展也需遵循其自身的生命周期,不同阶段的评判标准不同,结论自然也不一样。或许就像有人说的,“我不讨厌任何编程语言,我只是讨厌还没掌握的言。”具体到每一个开发者,所有的争论、质疑、好恶都要在尝试、学习、实操中逐步地变化演进。
参考资料:
https://zhuanlan.zhihu.com/p/342849423
https://blog.csdn.net/oSuiYing12/article/details/106844271
https://www.toutiao.com/article/7083687609608339998/
https://lang-team.rust-lang.org/roadmaps/roadmap-2024.html
https://thestack.technology/rust-language-explosive-growth-challenges-rust-governance/