你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

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

2021 年 7 月 05 日

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 年 7 月 05 日 10:572461

评论 1 条评论

发布
暂无评论
发现更多内容

四年Java开发,面试核心知识点(腾讯+阿里+快手面经)附答案

Java架构之路

Java 程序员 架构 面试 编程语言

滚雪球学 Python 之内置函数:filter、map、reduce、zip、enumerate

梦想橡皮擦

28天写作 3月日更

一个三本生的Java进阶之路:6年时间,从菜鸟到阿里P7!

Java架构之路

Java 程序员 架构 面试 编程语言

如何破解区块链人才的结构性问题?

CECBC区块链专委会

区块链

Nacos配置安全最佳实践

Robert Lu

nacos 配置中心

【20万大奖】参加APICloud3.0案例与AVM组件大赛,赢现金大奖

APICloud

开发者 前端开发 前端框架 APP开发 APICloud

华为云PB级数据库GaussDB(for Redis)介绍第四期:高斯 Geo的介绍与应用

华为云开发者社区

数据库 redis 华为云 geo Gauss DB

大厂社招Java面经:蚂蚁金服、拼多多、字节跳动(现已入职蚂蚁)

Java架构之路

Java 程序员 架构 面试 编程语言

Linux C/C++ 学习路线(已拿腾讯、百度等)

赖猫

c++ Linux服务器开发 LinuxC/C++

项目截图

赝品

亿级用户中心的设计与实践

互联网架构师小马

Java 程序员 架构 亿级流量 用户中心

2021版阿里Java亿级并发设计手册:基础+数据库+缓存+消息队列+分布式+维护+实战

Java成神之路

Java 程序员 架构 面试 编程语言

震荡的比特币:区块链的“照妖镜”

CECBC区块链专委会

数字货币

深读golang中map后思考和借鉴

ninetyhe

go 源码

一份MyBaits框架PDF文档,阿里架构师直呼牛逼!Java程序员快收藏吧

Java成神之路

Java 程序员 架构 面试 编程语言

牛批!阿里P9用一图点透程序员在大厂晋升“潜规则”与“方法论”(附:阿里内部笔记分享)

Java成神之路

Java 程序员 架构 面试 编程语言

“看得见 摸不着”的数字货币 助推数字经济强国建设

CECBC区块链专委会

数字经济

还不懂云数据库Redis是什么?快上车,一张图带你了解!

浪潮云

云数据库

【笔记】第七周 第1课

Geek_娴子

开课啦 dubbo-go 微服务升级实战

阿里巴巴云原生

容器 微服务 云原生 k8s dubbo

数字货币持币生息钱包系统开发搭建

薇電13242772558

区块链 数字货币

如何带团队?

石云升

程序员成长 28天写作 职场经验 管理经验 3月日更

已经整整10年了,经济学人分析日本福岛核泄漏事故带来的沉重影响

wbliu85

三面阿里成功入职,多亏了面试前刷了这份Redis速成笔记,我才成功抗住了Redis连珠炮!

程序员小毕

Java redis 架构 面试 阿里

偶获阿里大佬纯手码“887”页Java面试手册,突击学习,成功跳槽阿里!

互联网架构师小马

Java 程序员 面试 求职 找工作

身份和访问管理(IAM)

龙归科技

iam 身份和访问管理

音乐api接入HIFIVE音乐开放平台,获取百万正版音乐,最快30分钟集成上线!

HIFIVE嗨翻屋

API sdk 音乐 物联网,API,sdk

【动态规划/路径问题】强化 DP 分析方法练习题 ...

宫水三叶的刷题日记

LeetCode 数据结构与算法 面试数据结构与算法

Yarn日志聚合优化—摆脱HDFS依赖

笨小康

大数据 YARN

终于有人把 "高可用" 说清楚了

架构精进之路

3月日更

HashData携手中国移动 共筑通信技术数字化之路

HashData

数据库 解决方案

围绕“三个问题”开展的网易云音乐数据基础建设

围绕“三个问题”开展的网易云音乐数据基础建设

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