Skip to content

前言

大家好,我是 Puff,今天就来聊一聊 Rust 语言的前世今生吧。

之前的文章也提到过,Rust 是一个强调性能、类型安全和并发的系统级编程语言。它在 2010 年首次亮相,自诞生以来一直备受关注,它的诞生源于解决计算机应用中的内存安全问题,没错,针锋相对的就是 C/C++ ,C++ 内存问题频出,连世界顶级程序员使用 C++ 编写的代码都没办法避免内存安全的问题,刚好 Rust 就来了。

接下来就先来说一下它的前世吧。

前世

Rust 的前世可以追溯到 2006 年,当时 Mozilla 的一个叫 Graydon Hoare 的程序员因为家里的电梯软件崩了而无法使用,这让他很生气,他认为程序员不能开发出一个不会崩溃的电梯软件是很荒谬的(这也太抽象了吧)。他意识到许多软件崩溃都是因为程序对内存的使用问题导致的。很多的嵌入式设备中的软件通常都是用 C++或 C 等语言编写的,这些语言以高效运行和紧凑的代码著称,但也容易在编写代码时引入内存错误。根据微软的估计,其代码中 70% 的漏洞都是因为内存错误导致的。对于大多数人来说,遇到电梯坏了可能只会感到生气并离开然后默默走上了楼梯... ,但是 Hoare 这个大佬却采取起了行动,回去就打开了笔记本电脑,开始设计一种新的编程语言,希望能够编写小型、高效的代码,同时能够避免内存错误。他将这门语言命名为 Rust,这个名字取自一种非常坚韧的真菌,因为这种真菌被他认为是“为了生存而过度设计”。

在后来,随着 Rust 语言的发展,Mozilla 意识到它对于构建更好的浏览器引擎的潜力。因此,Mozilla 决定将 Rust 语言作为一个长期项目的一部分,并提供了持续的财务和法律支持。Mozilla 团队当时编写的火狐浏览器引擎 Gecko 经常遇到内存问题,因为是用 C++ 写的,写并发程序的时候经常内存泄漏,大家商议,是否需要重新设计 Gecko 框架?如果选择重新设计,C++的维护和推进中的难题还会存在,而且新旧框架的过渡永远都是一个实践中的痛。后面 Rust 的开发团队,对于新语言的设计讨论再三,精心设计,采取了所能利用的最高端的技术手段和思维方法,从零开始,用这个当时的新语言来编写火狐浏览器的引擎 Gecko。随着 Rust 在 Mozilla 的发展,它于 2015 年发布了 1.0 版本,然后在 2017 年,由 Rust 编写的部分引擎模块被置于当时火狐浏览器的最新版本时,火狐浏览器的安全系数和运行效率都比原来有所提高了。

今生

17 年后的今天,Rust 已经成为全球最热门的新型编程语言之一。全球有超过百万的程序员正在使用 Rust,从微软到亚马逊等公司都认为它是未来软件领域里的关键技术。聊天平台 Discord 使用 Rust 加速它的系统,Dropbox 使用 Rust 同步文件到电脑,Cloudflare 使用 Rust 处理全球 20% 以上的互联网流量。在 Stack Overflow 的年度开发者调查中,Rust 连续 8 年被评为 “最受开发者喜爱的” 编程语言。甚至美国政府也积极推广使用 Rust 编写软件,以提高其软件的安全性。Rust 的成功离不开数百名狂热的贡献者,其中许多人是志愿者。然鹅 Hoare 自己在 2013 年就退出了该项目,将其交给其他工程师,目前在 Github 上面能直接看到它的开源代码。但是去年因为核心团队站队乌克兰以及它们管理层一系列的作死操作,导致社区上一部分人也开始动摇,然后衍生出了一门新语言叫 CrabLang... ,虽然也是和 Rust 主分支进行同步的,但这也让一部分围观的人对 Rust 产生了质疑,不过今年这些质疑的声音有所减少,Rust 本身还是在继续高速的迭代的,整个社区也传出越来越多 Rust 的声音,包括安卓系统开始使用 Rust 来进行重构,微软 Windows 11 也开始有了 Rust 编写的模块,Linux 系统内核也开始支持 Rust,谷歌浏览器内核也开始逐渐使用 Rust 进行替换,还有最近的 Vivo 蓝河操作系统的框架也是使用 Rust 写的,还有一大堆前端的新工具目前也是沸沸扬扬的,这里也列举不完了,网上都能搜到这些相关的资料。

所以为什么说它越来越火了呢,它是目前唯一的一门既适用于底层又适用于应用层的编程语言,从操作系统到前端,后端啥的都能干。

总结

Rust 编程语言的诞生源于解决程序中的内存安全问题,它的发展历程充满了坎坷,但最终还是取得了巨大的成功。Rust 的特点在于强调安全和性能,尤其是安全并发,正如一开始在 Mozilla 内遇到的问题一样,它就是要解决这些场景的 。Rust 不使用自动垃圾回收,也不像 Swift/Python 那样使用自动引用计数。相反,它通过所有权和借用的原则来确保内存安全,避免了不确定的行为。但是说要用它来完全代替 C/C++ 也不可能,因为存量代码太多了,根本就不可能全部重构,只能说增量部分去慢慢用 Rust 来替换,另外 Rust 拥有很好的 FFI 能力,可以比较好的跟 C/C++ 集成,所以这也是为什么增量的模块都用 Rust 写的原因之一。

好了,差不多到这里,最后还是希望未来 Rust 能够发展好一点吧,也希望国内越来越多的公司去用,对 Rust 感兴趣的可以学起来了,正如我上一篇文章所提到的为什么要学一学 Rust。

每天进步一丢丢