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不仅仅是「好」而已。它还需要在某些地方「突出地好(much better)」。(什么叫突出的好呢?在《从0到1》一书中有过相关的考量,那就是「十倍」的好)
- 在其他方面至少能持平现有技术(比如,持平C)。
而且,引入新的语言不仅仅是技术问题:
- 新语言具有潜在的风险:这个赌注是长期的,无法马上获得回报
- 大多数人对完成工作比使用新语言更加感兴趣
因此,必须让大家了解:Rust是胜任工作的最佳工具。
Rust的10倍优势
那么Rust的十倍优势是什么呢?
- 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程序,在修改Bug的时候也能得心应手,因为有类型和生命周期(lifetime)约束等信息。
通过这个实际的案例,他们明显地体会到了Rust的十倍优势,因此有更多人想使用Rust。
FB内部最先积极采用Rust的群体是Python开发者,它们想寻求性能上的改进,对于Rust推广者来说,这是一个惊喜的转变。
然后Rust就越来越受更多人关注了,最后是那些只追求于完成任务的群体,他们也开始尝试Rust。现在FB已经有很多高价值的项目采用Rust,比如最近流行的Libra。
Facebook在招人
并且该Topic作者还透露了一个重点信息:Facebook在招Rust开发者! Rust在Facebook的旅程才走了1%,需要更多的人参与,走完剩下的99%。
小结
在这次分享中,还包含了作者如何看待Rust发展前景中要解决的各种问题,这里就不细说了,感兴趣的去看Slides吧。后续如何有视频,我也会补上来链接。
如果你想在自己的公司推广Rust,那么Facebook的这段经历可能对你有帮助。
感谢阅读。