问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

从电梯故障到编程新宠,Rust为何连续七年称霸"最受推崇语言"

创作时间:
作者:
@小白创作中心

从电梯故障到编程新宠,Rust为何连续七年称霸"最受推崇语言"

引用
澎湃
1.
https://m.thepaper.cn/newsDetail_forward_28422452

在StackOverflow每年发布的开发者调查中,Rust已经连续7年高票当选"最受推崇的语言"。这种诞生于2006年的编程语言,最初只是Mozilla程序员Graydon Hoare的个人项目,如今却已经成为微软、亚马逊等科技巨头眼中的关键技术。

根据MIT科技评论的报道,目前有280万程序员使用Rust编写代码,微软、亚马逊等科技巨头都将其视为未来的关键。聊天平台Discord使用Rust来加速系统,Cloudflare使用它处理超过20%的互联网流量。甚至美国政府也热衷于推广Rust编写的软件,以使其流程更加安全。

从电梯故障到编程语言革命

2006年,29岁的Graydon Hoare是Mozilla的一名程序员。有一天下班回家,突然发现电梯因为软件崩溃没法运行了。这已经不是第一次了,但Hoare家恰好住在21楼。他一边爬楼梯一边暗自恼火,"这太可笑了,我们这些搞计算机的人,甚至都没法造出一个不崩溃的电梯!"

作为程序员,Hoare很清楚问题所在——电梯等设备内部的软件通常都是用C或C++编写的,好处在于运行速度快,但也很容易意外引入内存错误,造成程序崩溃。微软估计,其代码中70%的bug都是由于这些语言的内存错误引起的。

或许是被愤怒的情绪激起了创造力,爬完楼梯回到家中后,Hoare打开电脑,开始设计一种新的编程语言。他希望这种语言能够编写出简洁、短小但运行速度快的代码,而且能从根本上杜绝内存错误。Rust这个名字也与此有关,根据Hoare的描述,这是一种非常顽强的真菌,"为了生存而被过度设计"。

Mozilla的慧眼识珠

Rust的开发历程不仅源于其本身的技术特点,更离不开Mozilla和开源社区在背后的支持。2009年,Mozilla决定正式赞助 Rust。虽然定位为开源语言,但Mozilla愿意雇用全职工程师来引导它的发展方向。

Rust小组接管了公司的一间会议室,Mozilla Research的联合创始人Dave Herman将这个房间戏称为"书呆子洞穴",并在门外贴了一个标志。Hoare估计,在接下来的10年里,Mozilla雇佣了十几名工程师全职从事Rust的开发工作。

2015年5月15日,Rust终于发布了1.0"稳定"版本,它足够可靠,可供公司真正投入商用。2016年,公司的一个开发小组发布了Servo,是一种用Rust构建的全新浏览器引擎;第二年,另一个小组用Rust重写了Firefox渲染CSS的部分,使使浏览器的性能得到了显著提升。

Rust的技术优势

Rust之所以能用如此快的速度威胁到C和C++的地位,与语言本身的安全特性有非常密切的关系。我们可以粗略地将计算机的动态内存想象为一块黑板,软件运行时,会不断地将少量数据写入黑板,同时跟踪数据的位置,并及时删除无用数据。

C或C++等比较古早的语言会给程序员更多权力,决定软件如何以及何时使用"黑板"。这种能力相当有用:通过自行控制和分配动态内存,程序员可以设计出运行速度很快的软件,因此C和C++常用于编写"裸机"代码(bare-metal),即直接与硬件交互的代码。

但这种优势不是没有代价的。俗话说得好,"能力越大,责任越大"。既然C/C++程序员有如此大的权力,能控制内存分配,自然也要仔细跟踪所有的内存写入和擦除过程。误删内容,程序会崩溃;忘记及时删除内容,程序也会崩溃。此外,如果有密码、财务信息等敏感内容遗留在内存中,还会造成安全隐患,给黑客以可乘之机。

随着一段C或C++代码逐渐膨胀,即使是最细心谨慎的程序员也可能会犯很多内存错误,从而开发出一个充满bug的软件。无人机公司Fusion Engineering的联合创始人Mara Bos同时兼任Rust Library团队负责人,她表示,"在C或C++中,你总是担心代码会随机爆炸。"

90年代,Java、JavaScript和Python等一系列新语言开始流行,它们采取了一种非常不同的方法进行内存自动管理——"垃圾收集器"(garbage collector, GC)。在软件运行的同时,GC会每隔一段时间自动清理内存,大大减轻了程序员的压力。但这类语言虽然有更少的内存错误,但失去了这种细粒度的内存管理,程序也会运行得更慢,尤其是GC机制也会造成额外的负担。

就此,编程语言逐渐分出了两个阵营——如果对性能要求较高,或是在嵌入式设备上运行,就用C或C++;如果要开发web或移动应用程序,那就需要有GC机制的语言。

通过创建Rust,Hoare希望能区分这些方法之间的差异。用Rust编码时,程序员不需要手动管理数据在内存中的位置,编译器会自动帮你做到这一点,但同时也引入了许多严格的规则,规定程序内使用或复制数据的操作。相比Python或JavaScript,这些规则更加繁琐,因此编码过程也更加困难,但可以保证程序的"内存安全"。

更重要的是,Rust还提供"并发安全"。在现代程序中,并发执行的多个线程可能会尝试同时修改同一块内存,而Rust的内存系统会自动阻止这种情况。

整个2010年代初,Mozilla工程师和世界各地的Rust志愿者们逐渐打磨出了Rust的核心,也就是它管理内存的方式。他们创建了一个"所有权"系统(ownership),规定每条数据只能由一个变量引用,并由编译器强制执行,这大大降低了出现内存问题的几率。

Mozilla工程师Manish Goregaokar如今负责Rust的开发者工具团队,他表示,Rust采用的许多技巧并不是什么新想法,其中大多都是几十年前的研究。但Rust工程师善于发现这些经过精心打磨的概念,并将其转化为实际可用的功能。

随着团队逐渐改进内存管理系统,Rust对GC的依赖逐渐减少,到2013年,开发团队就从Rust中彻底移除了GC组件。然而,有些工程师认为Rust仍然保留了一些类似GC机制的元素,比如引用计数系统(reference counting),作为内存所有权机制的一部分。

没有垃圾清理机制,程序就不需要定期中断以清理内存,Rust的运行速度也随之加快,性能接近C和C++的水准,但保证了内存安全。

Rust的广泛应用

Rust在逐渐推广时展现出的高性能常常让工程师们为之振奋。Discord的工程师们对Go的GC机制积怨已久,即使代码构建得非常仔细,没有垃圾可以收集,Go也依旧会两分钟暂停一次执行GC。2020年,他们用Rust重写了系统,发现运行速度比原来提高了10 倍。

AWS的高管和工程师也越来越相信,Rust可以帮助他们编写更安全、更快的代码。他们进行了相关的研究,发现相比Java,基于Rust的类似代码的耗电量可以减少一半,这就意味着可以用相同的设备运行2×的工作负载。

Rust能从业余项目逐渐发展至今天的成就,没有人比Hoare更感到惊讶。毕竟,大多数语言在正式面世之前,就已经半途而废了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号