【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Facebook 是如何引入并使用 Rust 的?

  • 2021-07-05
  • 本文字数:2181 字

    阅读完需:约 7 分钟

Facebook是如何引入并使用Rust的?

Facebook 正在拥抱当今最受欢迎 、发展最快的一门编程语言——Rust。当前,Facebook 除了为公司内部的 Rust 团队引进人才,还正式加入了 Rust 基金会,与 Mozilla(Rust 的创造者)、AWS、微软和谷歌等其他成员一起,致力于维持和发展 Rust 的开源生态系统。


Rust 为开发者提供了类似 C++ 之类的老编程语言的性能,并更注重代码的安全性。如今,在 Facebook 有数百名开发者在编写数百万行 Rust 代码。很明显, Facebook 未来在这门语言上的投入会越来越大。在分享未来的具体投入举措之前,有必要先了解下 Facebook 早期是如何引入并使用 Rust 的。

2016~2017 年:早期用于源代码控制

 

我们最古老的 Rust 代码库可以追溯到 2016 年。当时,Facebook 单体仓库中的源代码变化率开始“侵占” Mercurial 源代码控制管理工具所能跟上的最大提交率。对此,Facebook 的源代码控制团队发起了一项名为 Mononoke 的重写项目,旨在将 Mercurial 的提交率再提高一些数量级,从而满足 Facebook 成千上万的开发者和自动化流程。

 

起初,使用 C++ 开发 Mononoke 显然是个选择。在那时,Facebook 的后端代码库对 C++ 非常重视,这意味着 Mononoke 默认会使用 C++ 实现。但是,源代码控制团队需要考虑源代码控制管理后端的可靠性需求,如果服务因停机或损坏而造成停顿时,那么可靠性就成了首要的考虑因素。因此,团队选择使用 Rust 代替了 C++。


Mononoke 是一款优秀的测试平台,因为它和其他 Facebook 系统有着天然的隔阂。如果 Mononoke 能够使用 Mercurial 协议与客户端服务进行对话,并使用 Thrift 协议与某些存储系统进行通信,那么选择 Rust 不会影响源代码控制团队工作之外的任何事情。


源代码控制团队愿意采用并且能够支持他们自己使用任何 Rust 特定的工具和基础设施。从 2019 年开始,Mononoke 就已经成为我们单体仓库的生产后端,并在过去几年里成功地扩大了规模。

2017~2019 年:采用曲线


Mononoke 足以证明采用 Rust 是可行的,随着时间的推移,其他项目也开始考虑和采用 Rust。一开始,这些项目通常是开发者的工具项目,它们不需要与更广泛的服务基础设施进行集成,也不需要小型服务 / 守护进程,只需围绕一些 C++ 客户端库使用几个手写的包装器就能完成工作。

 

在 Facebook 的 Rust 工程师中,有许多人具有 Python 和 JavaScript 的背景,他们很欣赏 Rust 结合了高性能与编译时错误检测这一特性。随着越来越多的成功案例(例如性能提升了 2 到 4 个数量级等)在公司内部流传,人们对使用 Rust 实现后端服务代码,以及探索其在移动应用程序中的应用的兴趣越来越浓。

2019~2020 年:Rust 得到了一些专门支持

 

2017 年到 2019 年,源代码控制团队成为 Facebook 内的非官方 Rust 支持团队。到了 2019 年,Facebook 的 Rust 开发者数量成倍增长,达到 100 多人。


增长背后的原因之一是,Rust 是开发 Diem(原 Libra)区块链的主要语言,由独立的 Diem 协会监督,而 Facebook 的数字钱包 Novi 就是 Diem 协会的成员。Diem 区块链主要是由 Rust 编写的,并涵盖了 94% 的开源代码库

 

考虑到需求的增加,源代码控制团队的兼职协助并不足以支持受益的团队数量。因此,我们创建了一个小型的 Rust 开发者体验团队,该团队致力于解决工具和集成方面的挑战,比如在生产非 cargo 构建中使用语言的开源包注册表生态系统的机制。该团队为整个公司的 Rust 开发者建立了一个中央连接点以解锁用例,优先考虑短期的开发者体验问题,改进核心库,并在刚刚起步的 Rust 代码库通过百万行大关时为其成功奠定基础。

未来(2021 年及以后)

 

2020 年底,我们在编程语言组织中成立了一个 Rust 团队,以重申我们的承诺,该团队还负责 Facebook 的 C++ 标准工作和工具链。

 

从近期来看,这个新团队主要关注四个方面:

 

  • 从语言和工具链的角度支持内部用户:这包括工具链的推出、横切迁移、代码审查 / 审计、最佳实践,以及作为语言和工具链问题的连接点。

  • 在 Facebook 以外的社区作出积极的贡献:该团队对标准库和编译器进行代码审查,并为 Rust 社区的优先事项提供开发者资源。

  • Rust 与 C++ 的轻松、安全的互操作性:我们拥有大量的 C++ 代码,用于与服务所建立的后端系统的通信。在不牺牲 Rust 的优点的情况下,我们需要开发者能够安全、轻松地使用这些库。相反,如果我们希望看到 Rust 组件与更大的 C++ 二进制文件集成,我们就需要智能运行时的异步代码互操作性。Facebook 的服务器是高度分布式的,并且有大量线程。Rust 任务需要在 C++ 的线程池中良好运行,并且能够安全地共享同步原语和 I/O 资源。为了提高异步性,支持并迅速采用了 C++20 的协程,我们在 C++ 方面做了很多工作。把 Rust 带到游戏中就是它的扩展,它将建立在 Rust 在异步库栈中已经完成的出色工作的基础上。

  • 积极支持并参与 Rust 基金会的工作:自 2016 年以来,Facebook 一直致力于 Rust 社区并扩大其与 Rust 的发展。通过加入 Rust 基金会,我们成为白金会员,进一步履行这一承诺,并希望以一种积极和有影响力的方式帮助 Rust 继续取得进展并得到应用。

 

Facebook 的 Rust 之旅远没有结束。这支团队虽小,但随着支持需求的增加,会不断壮大。Rust 在 Facebook 和整个行业的发展轨迹让我们感到兴奋和乐观,Facebook 内部的工作日程安排、开源贡献和更多面向社区的工作都将在 2021 年展开。

 

原文链接:

 

https://engineering.fb.com/2021/04/29/developer-tools/rust/

2021-07-05 10:573833

评论 1 条评论

发布
用户头像
julia对标python,rust对标c++,新一代编程语言来势汹汹。
2021-07-26 11:23
回复
没有更多了
发现更多内容

Compose 中的文字

Changing Lin

8月日更

2分钟玩转中文接口测试工具-ApiPost

CodeNongXiaoW

项目管理 大前端 测试 后端

业内首发!腾讯位置服务推出移动端3D数据可视化图层

【Vue2.x 源码学习】第三十九篇 - 组件部分 - 创建组件虚拟节点

Brave

源码 vue2 8月日更

AI+云原生,把卫星遥感虐的死去活来

华为云开发者联盟

AI 容器 云原生 k8s 遥感影像

摄影利器一加9 Pro,让你轻松成为手机摄影师

Geek_8a195c

JS对象拷贝:深拷贝和浅拷贝

华为云开发者联盟

js 对象 对象拷贝 深拷贝 浅拷贝

Go 语言,一文彻底搞懂 slice 实现原理

微客鸟窝

Go 语言 8月日更

波场链DAPP开发|波场链TRONCHAIN介绍

Geek_23f0c3

DAPP智能合约交易系统开发 波场链DAPP开发 tronchainDAPP

搜房记

escray

生活记录 8月日更

netty系列之:自定义编码和解码器要注意的问题

程序那些事

Java Netty 程序那些事

接口测试--apipost如何自定义变量

与风逐梦

软件测试 接口测试

LT浏览器——响应式网站测试利器

FunTester

性能测试 自动化测试 web测试 兼容性测试 测试报告

LeetCode题解:219. 存在重复元素 II,哈希表,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

vue入门:http客户端axios

小鲍侃java

8月日更

Apache HBase MTTR 优化实践:减少恢复时长

华为云开发者联盟

Apache hadoop zookeeper HBase MapReduce服务

抖音快手智能获客黑科技软件系统开发费用

MySQL 系列教程之(七)DQL:从 select 开始

若尘

MySQL 数据库 8月日更

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第IV章」

Regan Yue

云计算 微软 8月日更 微软认证

MySQL 不完全入门指南

Java 编程 架构 面试 架构师

评DeepMind神经网络求解MIP论文:并非无所不能

杉数科技

神经网络 机器学习 算法 Deep learning 智能优化算法

低代码:时代的选择

华为云开发者联盟

云计算 软件开发 低代码 硬件 IT系统

如何请求一个需要登陆才能访问的接口(基于cookie)——apipost

Proud lion

大前端 后端 Postman Cookie 接口工

面试官:你说说一条更新SQL的执行过程?

艾小仙

前端,测试如何修改后端接口返回的响应数据

CodeNongXiaoW

项目管理 大前端 测试 后端 接口管理工具

抖音快手短视频获客系统软件开发

Java筑基 - JNI到底是个啥

码农参上

Java jni 8月日更

架构实战营第一期 -- 模块五作业

clay

架构实战营

AI 场景的存储优化之路

焱融科技

人工智能 云计算 AI 分布式 高性能

抖音快手短视频智能询盘获客系统软件开发介绍

抖音快手获客软件系统开发价格

Facebook是如何引入并使用Rust的?_语言 & 开发_Facebook工程_InfoQ精选文章