Meta 为什么选择 Rust

106 阅读3分钟

本文来自 

engineering.fb.com/2022/07/27/…

在 Meta,我们在各种平台和用例中使用多种编程语言。引入新语言是一个经过深思熟虑的决定。我们确保每种采用的语言都适合特定的用例,因此在评估语言时会进行高度的尽职调查。一旦做出语言决策,通常会长期坚持,因此我们希望从一开始就慎重考虑,为工程师提供最佳的开发工具。

这篇文章总结了 Meta 内部当前被推荐用于服务器端开发的编程语言,Rust 是其中最新加入的成员。


什么是“支持”的语言?

当我们说一种语言被“支持”,意味着以下几点:

  • 开发人员拥有良好的编辑、调试、构建和部署体验。
  • 提供核心库、互操作性工具和持续的支持。
  • 开发者不必担心未来会被强制迁移到其他语言。
  • 新项目推荐采用这些语言。

全面支持一种语言对 Meta 是一项重大的长期投资,因此非主流语言通常由社区自行维护,Meta 不会对其提供全面支持。一般不推荐在新项目中使用这些“长尾”语言,除非已有深度技术积累。


当前被支持的服务器端语言

Meta 当前主要支持以下几种服务器端编程语言:

  • C++ 和 Rust:适用于对性能敏感的服务。Rust 是新近加入支持列表的语言,已经在公司多个项目中得到实际应用。
  • Rust(命令行工具) :2022 年起,Rust 被推荐用于开发 CLI 工具。
  • Hack:适用于编写业务逻辑和相对无状态的应用,具有高度自动化和内部生态支持。
  • Python:广泛应用于数据科学、机器学习,以及 Instagram 等平台。

此外,Meta 在特定场景下也使用如 Java、Erlang、Haskell 和 Go,但它们未被作为通用支持语言推荐。


为什么要控制语言的数量?

在 Meta 的规模上支持一种语言意味着在以下方面都要投入资源:

  • 核心库维护:语言越多,核心库的适配和开发负担越大。
  • 安全与隐私:语言分裂增加统一安全功能和隐私保护实现的难度。
  • 运维与故障响应:统一语言便于跨团队协作和紧急问题响应。
  • 人才培养与专业积累:支持的语言会建立起系统性知识和专家团队。
  • 开发者体验:IDE、调试器、构建工具等都需要持续优化和投入。

因此,引入一门新语言前需要进行严格评估和长期规划。


Rust:新成员,长期承诺

Meta 内部使用 Rust 的项目正在迅速增长。我们很高兴 Rust 被正式纳入服务器端支持语言列表中。Rust 提供了内存安全、高性能的优势,适合构建复杂、可靠的系统。这个决策反映了我们对 Rust 语言生态系统的认可和长期承诺。