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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Facebook 正在拥抱当今"},{"type":"link","attrs":{"href":"https:\/\/insights.stackoverflow.com\/survey\/2020#most-popular-technologies","title":null,"type":null},"content":[{"type":"text","text":"最受欢迎"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 、发展最快的一门编程语言——Rust。当前,Facebook除了为公司内部的 Rust 团队引进人才,还正式"},{"type":"text","text":"加入了 Rust 基金会"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",与 Mozilla(Rust 的创造者)、AWS、微软和谷歌等其他成员一起,致力于维持和发展"},{"type":"text","text":"Rust"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"的开源生态系统。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Rust 为开发者提供了类似 C++ 之类的老编程语言的性能,并更注重代码的安全性。如今,在 Facebook 有数百名开发者在编写数百万行 Rust 代码。很明显, Facebook 未来在这门语言上的投入会越来越大。在分享未来的具体投入举措之前,有必要先了解下 Facebook 早期是如何引入并使用 Rust的。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2016~2017 年:早期用于源代码控制"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我们最古老的 Rust 代码库可以追溯到 2016 年。当时,Facebook 单体仓库中的源代码变化率开始“侵占” Mercurial 源代码控制管理工具所能跟上的最大提交率。对此,Facebook 的源代码控制团队发起了一项名为 "},{"type":"link","attrs":{"href":"https:\/\/github.com\/facebookexperimental\/eden\/tree\/master\/eden\/mononoke","title":null,"type":null},"content":[{"type":"text","text":"Mononoke"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 的重写项目,旨在将 Mercurial 的提交率再提高一些数量级,从而满足 Facebook 成千上万的开发者和自动化流程。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"起初,使用 C++ 开发 Mononoke 显然是个选择。在那时,Facebook 的后端代码库对 C++ 非常重视,这意味着 Mononoke 默认会使用 C++ 实现。但是,源代码控制团队需要考虑源代码控制管理后端的可靠性需求,如果服务因停机或损坏而造成停顿时,那么可靠性就成了首要的考虑因素。因此,团队选择使用 Rust 代替了 C++。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Mononoke 是一款优秀的测试平台,因为它和其他 Facebook 系统有着天然的隔阂。如果 Mononoke 能够使用 Mercurial 协议与客户端服务进行对话,并使用 Thrift 协议与某些存储系统进行通信,那么选择 Rust 不会影响源代码控制团队工作之外的任何事情。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"源代码控制团队愿意采用并且能够支持他们自己使用任何 Rust 特定的工具和基础设施。从 2019 年开始,Mononoke 就已经成为我们单体仓库的生产后端,并在过去几年里成功地扩大了规模。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2017~2019 年:采用曲线"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Mononoke 足以证明采用 Rust 是可行的,随着时间的推移,其他项目也开始考虑和采用 Rust。一开始,这些项目通常是开发者的工具项目,它们不需要与更广泛的服务基础设施进行集成,也不需要小型服务 \/ 守护进程,只需围绕一些 C++ 客户端库使用几个手写的包装器就能完成工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在 Facebook 的 Rust 工程师中,有许多人具有 Python 和 JavaScript 的背景,他们很欣赏 Rust 结合了高性能与编译时错误检测这一特性。随着越来越多的成功案例(例如性能提升了 2 到 4 个数量级等)在公司内部流传,人们对使用 Rust 实现后端服务代码,以及探索其在移动应用程序中的应用的兴趣越来越浓。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2019~2020 年:Rust 得到了一些专门支持"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"2017 年到 2019 年,"},{"type":"text","text":"源代码控制团队成为 Facebook 内的非官方 Rust 支持团队。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"到了 2019 年,Facebook 的 Rust 开发者数量成倍增长,达到 100 多人。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"增长背后的原因之一是,"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Rust 是开发 "},{"type":"text","text":"Diem"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(原 Libra)区块链的主要语言,由独立的 Diem 协会监督,而 Facebook 的数字钱包 Novi 就是 Diem 协会的成员。Diem 区块链主要是由 Rust 编写的,并涵盖了 94% 的开源"},{"type":"link","attrs":{"href":"https:\/\/github.com\/diem\/diem","title":null,"type":null},"content":[{"type":"text","text":"代码库"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"考虑到需求的增加,源代码控制团队的兼职协助并不足以支持受益的团队数量。因此,我们创建了一个小型的 Rust 开发者体验团队,该团队致力于解决工具和集成方面的挑战,比如在生产非 cargo 构建中使用语言的开源包注册表生态系统的"},{"type":"text","text":"机制"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。该团队为整个公司的 Rust 开发者建立了一个中央连接点以解锁用例,优先考虑短期的开发者体验问题,改进核心库,"},{"type":"text","text":"并在刚刚起步的 Rust 代码库通过百万行大关时为其成功奠定基础。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"未来(2021 年及以后)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"2020 年底,我们在编程语言组织中成立了一个 Rust 团队,以重申我们的承诺,该团队还负责 Facebook 的 C++ 标准工作和工具链。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"从近期来看,这个新团队主要关注四个方面:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"从语言和工具链的角度支持内部用户"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":这包括工具链的推出、横切迁移、代码审查 \/ 审计、最佳实践,以及作为语言和工具链问题的连接点。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"在 Facebook 以外的社区作出积极的贡献"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":该团队对标准库和编译器进行代码审查,并为 Rust 社区的优先事项提供开发者资源。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"Rust 与 C++ 的轻松、安全的互操作性"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":我们拥有大量的 C++ 代码,用于与服务所建立的后端系统的通信。在不牺牲 Rust 的优点的情况下,我们需要开发者能够安全、轻松地使用这些库。相反,如果我们希望看到 Rust 组件与更大的 C++ 二进制文件集成,我们就需要智能运行时的异步代码互操作性。Facebook 的服务器是高度分布式的,并且有大量线程。Rust 任务需要在 C++ 的线程池中良好运行,并且能够安全地共享同步原语和 I\/O 资源。为了提高异步性,支持并迅速采用了 C++20 的协程,我们在 C++ 方面做了很多工作。把 Rust 带到游戏中就是它的扩展,它将建立在 Rust 在异步库栈中已经完成的出色工作的基础上。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"积极支持并参与 "},{"type":"link","attrs":{"href":"https:\/\/foundation.rust-lang.org\/","title":null,"type":null},"content":[{"type":"text","text":"Rust 基金会"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"的工作"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":":自 2016 年以来,Facebook 一直致力于 Rust 社区并扩大其与 Rust 的发展。通过加入 Rust 基金会,我们成为"},{"type":"text","text":"白金会员"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",进一步履行这一承诺,并希望以一种积极和有影响力的方式帮助 Rust 继续取得进展并得到应用。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Facebook 的 Rust 之旅远没有结束。这支团队虽小,但随着支持需求的增加,会不断壮大。Rust 在 Facebook 和整个行业的发展轨迹让我们感到兴奋和乐观,Facebook 内部的工作日程安排、开源贡献和更多面向社区的工作都将在 2021 年展开。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"原文链接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"https:\/\/engineering.fb.com\/2021\/04\/29\/developer-tools\/rust\/"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章