rust难普及(为何学的人那么少)(1)

作者丨千山

审校丨武穆

放眼编程语言界,新旧势力的交替历来暗潮涌动又动人心弦。而在最近两年,Rust的表现不可谓不抢眼。

根据SlashData 2021年开发者报告显示,使用Rust编程的开发人员在过去24个月内增长了两倍,达到了220万。过去C/C 、Java等是大厂的常用语言,而如今,字节跳动、亚马逊、谷歌、苹果均已经用上了Rust语言,这意味着学好Rust语言就有机会找到高薪工作。

不过,也有人认为Rust学习门槛高,戏言“Rust的语法有点反人类”。那么事实到底如何呢?

PART 01

“当红炸子鸡”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%认为挑战性不大。

rust难普及(为何学的人那么少)(2)

图源:互联网

可以说,除了部分具备一定的C/C 经验的开发者在使用Rust时会容易一点,很多人会因为“太难上手”而对Rust望而生畏。

PART 02

Rust对决C

以卵击石还是后生可畏

Rust到底值不值得花功夫去上手?我们可以从它与其他语言的比较中一窥端倪。

Rust常常被认为是C 的竞争语言,但这种说法也会被一些C 拥护者吐槽为“碰瓷”。不可否认,Rust很受欢迎,且颇有后劲,但目前来说,C 的主导地位依旧不可动摇。宏观来看,C 拥有更大的社区、更广泛的用例,并且在实战中得到了绝大多数企业的认可。但另一方面,Rust在安全性上表现更优,没有C 那么重的历史包袱,作为新生力量潜力更大,等生态更加丰富后可能会更有作为。

归根结底,所有语言都是工具,真正使用时都要因地制宜。作为一门优缺点都极为鲜明的语言,Rust在实战中表现如何仍需要开发者的亲手验证。有位C 程序员的评价或许可以给我们更多启发:

“虽然Rust定位于一门系统级编程语言,但它并没走C 兼容C的老路,完全没有历史的包袱,可以轻装上阵,充分吸收各家编程语言之长,避其之短。Rust有完全不亚于C 的表达能力和性能,又解决了C 的最大痛点(内存安全、线程安全),这对C 程序员来讲无疑是非常有吸引力的。目前,C 仍然是我的主力编程语言,但我对Rust是看好的。它不仅实用,反过来也会促进对C 中关键概念和问题的理解。”

PART 03

前景: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,支持和反对阵营也同样各执己见。

支持者给出的理由,主要集中在以下几点:

反对者则认为:

回顾这些论点,可以发现,其实作为局中人,要预判一门语言的发展是很难的,因为没有人可以窥见其发展全貌。而且每门语言的发展也需遵循其自身的生命周期,不同阶段的评判标准不同,结论自然也不一样。或许就像有人说的,“我不讨厌任何编程语言,我只是讨厌还没掌握的语言。”具体到每一个开发者,所有的争论、质疑、好恶都要在尝试、学习、实操中逐步地变化演进。

参考资料:

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/

来源:51CTO技术栈

,