近年来Rust的存在感日渐升高,但是其陡峭的学习曲线似乎总是令人望而生畏。不过谷歌的一项内部调查表明,关于Rust的“难学”或许只是一种谣传。
Rust到底难不难学?谷歌有了Go,为何还要支持Rust?频频陷入内斗的Rust领导团队于近日彻底重组,这会为Rust发展带来哪些变化?且看下文分解。
1、不难学,但新手勿入
谷歌的这项调查主要针对1000多名受雇于谷歌的软件开发人员,其中约有13%的人有Rust经验,但多数人还是来自C/C++、Python、Java、Go或Dart。结果显示,Rust并不比其他编程语言更难学习。
Rust语言因其高性能以及C和C++等其他系统语言所缺乏的安全保证而受到推崇,但也经常听人抱怨Rust学习门槛高,尤其是对于所有权等陌生概念的理解往往会耗费时间。
根据调查,对于开发人员来说,掌握Rust的三大挑战是:宏、所有权和借用、异步编程。尽管如此,开发人员仍然很快掌握了这项语言。
如下图所示,约有27%的被调查者有信心在2-3周内上手Rust,超2/3的受访者表示用两个月或更短时间就能为Rust代码库做出贡献。此外,1/3的受访者利用两个月或更短的时间,使用Rust编写代码的效率就和其他语言一样高。
图源:googleblog
报告指出:“没有任何数据表明Rust相对于任何其他语言有任何生产力损失。”
值得一提的是,开发人员普遍认为Rust代码的质量很高。当问及他们是否认为Rust代码的正确性高于用其他语言编写的代码时,超过85%的受访者表现出了信心。
关于Rust的难学与否,国内外各大论坛都曾讨论过相关话题。综合来看,还是应了那句老话“难者不会,会者不难”。有人倒在了“入门阶段”,认为其语法逆天、泯灭人性,也有人如下面这位有过C++经验的网友所描述的,“学习成本不大”。
图源:知乎
当然,对于编程新手或者没有其他语言经验的人来说,Rust肯定不会是首选。不过,对于有一定编程经验的开发者来说,是否可以摈弃先入为主的观念,愿意尝试接纳Rust的玩法,才是关键。毕竟,从来没有完美而全能的语言,只有适合与否的语言。
2、为何科技巨头力推Rust
根据Stack Overflow的年度开发人员调查,Rust已经连续数年坐镇全球最受欢迎编程语言Top5。不止于开发者,诸多大型科技公司对于Rust也颇为青睐。
由于其内存安全性和多线程功能等,Rust正在大公司的技术堆栈中得到广泛采用。谷歌、苹果、微软、Meta等都以某种形式采用了Rust。
- 谷歌使用Rust为Android编程,甚至开源了全面的Rust课程
- 苹果在其许多项目中使用 Rust,包括机器人、AR/VR 工程、云工程和视频工程
- 微软是Rust的大力支持者,用它来减少Windows中内存安全问题的数量;
- Meta不仅加入了 Rust 基金会,还指定Rust为官方支持的服务器端编程语言之一
问题来了:为什么这些大型科技公司在投入资源开发自己的编程语言后又转向Rust?
例如,由谷歌创建的Go在其产品中被广泛使用。同样,由苹果开发的Swift也用于为iOS,MacOS等构建应用程序。Microsoft开发的C#也在内部推动,但所有这些公司之间的共同点是,尽管他们有自己的语言,但他们还是找到了对Rust的需求。
究其根本,Rust填补了拥有大型旧代码库的公司的一个非常重要的利基市场:现代低级编程语言。每种语言都有其独一无二的个性,如果两种语言都以或多或少相同的方式行动,那么我们就不会真的需要两种不同的语言。
举个例子,Go和Rust。这两者都是流行的、现代的、广泛使用的语言,但具体来说,两者的编程方法和适用场景截然不同。资深软件开发工程师Andrew Lader描述道:
“如果你希望有更好的开发效率,或是有非常多不同的服务需要实现,或者开发团队较为庞大,Go是一个很好的选择。Go提供了一流的并发能力,不允许不安全的内存访问(Rust也是如此),也不会强迫你管理每一个细节。Go是高效且强大的,避免开发人员陷入困境,专注于简单性和统一性。
另一方面,如果你需要榨干每一滴性能,那么你应该选择Rust。与Go相比,Rust更像是C++的竞争对手。与C++同样强大,还提供了许多令人愉快的改进。Rust使开发者能够更细致地控制线程的其他行为、错误处理、变量生命周期!还有,Rust设计的目的之一是能够与C互操作。Go也可以,但为了实现这个目标需要付出很多,这并不是Go的重点。”
由此可见,Go和Rust各有所长,因为他们针对的是完全不同的使用情况,至于到底选Go还是Rust,终究还是要看哪种语言更适合你和你的团队的实际情况。
3、结束“抓马”大乱斗,社区治理开始新故事
不管是在开发者群体中,还是在各大科技公司里,Rust正以不容忽视之姿呈现上升之势,但今年以来,关于Rust的一些争议新闻不时出现在公众视野。
6月初,我们发布了 《果然,Rust还是分叉了!》一文,提到了Rust团队内部的混乱治理,以及一些和技术无关的激烈“政治斗争”事件。社区对Rust管理团队这种无休止的“混乱无序”状态感到担忧,认为这会损害Rust语言的声誉和发展。
种种治理弊端的暴露促使Rust团队内部也开始了整顿。不久前,他们宣布对组织结构进行重大调整。
此前,Rust项目创建了包括core、language、mod、library和cargo在内的若干团队。其中核心(core)团队主要负责监督其他Rust团队出现的问题。但时移世易,由于核心团队拥有对Rust语言动态的最高决策权,又不受其他团队监督,就导致事态走向了失序。
调整后,此前“抓马”不断的Rust核心团队被移除,临时领导者地位彻底终结。取而代之的是,Rust项目的每个顶级团队选派一名代表,共同组成Rust领导委员会(Rust Leadership Council),负责顶级治理问题。
“我们希望在成功的基础上再接再厉,在失败的基础上加以改进,最终导致更大的透明度和问责制。”Rust领导委员会如是表态。如何提高Rust领导层的透明度,偿还可能的“治理债务”才是今后工作的重点。
而Rust项目的大部分发展和维护工作,如编译器和核心工具的维护、基础设施的管理等,仍由九个顶级团队负责。这九个团队涵盖以下内容:编译器、crates.io、开发工具、基础结构、语言、启动板、库、审核和发布。
有趣的是,回溯过往,可以发现,Rust之所以会陷入治理危机与其发展历程息息相关。Rust语言最初只是Mozilla员工Graydon Hoare 在2006年创建的一个业余项目,直到在2021年2月,Rust被移交给独立的Rust基金会,这门语言才真正开始起飞。也正因为如此,Rust从诞生之初就缺乏一位标志性的技术权威的领导。
与之形成鲜明差异的是Python。Guido van Rossum不仅是Python的创始人,还被冠以“终身仁慈独裁者”(Benevolent Dictator For Life-BDFL)称号(龟叔在2018年时宣布不再出任BDFL)。对于一门语言而言,社区出现争议时拥有最终决定权的是谁,很大程度上会决定其生态发展的最终导向。