Facebook如何引入Rust - 知乎

今天刚看到Facebook内部meetup流出的Slides,原文标题很有意思:Bringing Rust Home

to Meet the Parents (带Rust去见父母)。该分享主要是讲了Facebook引入Rust的过程,我也没有看过Meetup的内容,只是想通过Slides来解读并还原一下Facebook引入Rust的历程

Slides地址:https://docs.google.com/presentation/d/1RLNyr3riO2LyqQsMAOvMMyGTllhx1wPmfkXXcbtOB00/edit#slide=id.p


该Topic的作者是一名资深的工程师,他在操作系统内核领域使用C语言有30多年,入职Facebook三年。作者坦言:C语言只是他趁手的工具,但不是他喜欢的工具。Facebook是他有意加入,为了学习在大规模的组织中如何工作。看得出来,是一名非常有独立思想的工程师。当他看到Facebook内部还没有人使用Rust,他就想,为什么不尝试引入Rust呢?

引入的条件

在大公司中引入新技术本身是一件非常困难的事情,更何况还是Facebook如此巨大的公司,而且Rust还是要替代C来做很多基础设施。所以,要想在Facebook中引入Rust,需要满足以下条件:

而且,引入新的语言不仅仅是技术问题:

因此,必须让大家了解:Rust是胜任工作的最佳工具。

Rust的10倍优势

那么Rust的十倍优势是什么呢?

对于Facebook这种企业,生产时出错的成本可想而知会很高。

引入的起点

Facebook内部使用的主流语言是:Cpp、Java和Python。但其实有很多通晓多种语言的人,他们可以自由选择语言和技术。但他们通常都是务实的,在选择语言的时候,必须有充分的理由去选择它。

庞大的代码仓库,有数亿行代码。这些庞大的代码资源,都是通过自定义的专门工具来处理,从源码控制、构建、CI到测试、部署,以及监控和分析等生产基础设施。那么想引入Rust该从何入手?

聪明的选择

他回顾了Rust的世界观:

等等。

同时,他思考,如何才能让Facebook内部这个庞大的生态系统感受到Rust的好呢?这是一个很好的出发点,于是他选择了一个「版本管理系统 Mercurial」。因为版本管理系统是在内部应用最广的,而且Mercurial之前是Python实现的,性能急需改进。

所以,用Rust从头开始实现源码版本控制系统的后端被提上了日程。于是就有了现在的 mononoke 项目(差不多快3年了)。

Mononoke项目的生产实践,证明了Rust值得进一步投资。并且,Rust帮助他们降低了Bug的成本。

Facebook运行中出问题是一个非常恐怖的事情,因为会造成很大的损失。所以FB在代码的质量上投入了大量的资源:

等等,这些属于内部开发循环。工程师们会在不同的上下文中切换,来修复其中的问题。而使用Rust,则可以减少内部循环中的大量错误,因此可以帮助工程师们减少不必要的上下文切换。

但是Rust也并不是万能的,如何量化那些未在编译期发现的Bug的成本呢?在这一点,Rust也给予了很大的帮助:

通过这个实际的案例,他们明显地体会到了Rust的十倍优势,因此有更多人想使用Rust。

FB内部最先积极采用Rust的群体是Python开发者,它们想寻求性能上的改进,对于Rust推广者来说,这是一个惊喜的转变。

然后Rust就越来越受更多人关注了,最后是那些只追求于完成任务的群体,他们也开始尝试Rust。现在FB已经有很多高价值的项目采用Rust,比如最近流行的Libra。

Facebook在招人

并且该Topic作者还透露了一个重点信息:Facebook在招Rust开发者! Rust在Facebook的旅程才走了1%,需要更多的人参与,走完剩下的99%。

小结

在这次分享中,还包含了作者如何看待Rust发展前景中要解决的各种问题,这里就不细说了,感兴趣的去看Slides吧。后续如何有视频,我也会补上来链接。

如果你想在自己的公司推广Rust,那么Facebook的这段经历可能对你有帮助。

感谢阅读。