写点什么

Meta 在服务器端用了哪些编程语言?

  • 2022-07-29
  • 本文字数:1350 字

    阅读完需:约 4 分钟

Meta在服务器端用了哪些编程语言?

Meta 软件工程经理 Eric Garcia 在 7 月 27 日发布的一篇博文中介绍了 Meta 服务器端使用的编程语言有哪些,以及内部对于编程语言的采用是如何考虑的。


“在 Meta 内部,我们会在各种各样的平台和使用案例上用到很多不同的编程语言。支持一种新的语言并不是一个轻易就能做出的决定。”Eric 说道,“每当我们评估一种语言时,我们都要做大量的工作。一旦我们做出要采用某项语言的决定,就会坚持下去,因此我们需要从一开始就深思熟虑,为我们的工程师提供最好的工具。”


那么,一旦 Meta 决定支持、采用某个编程语言,这意味着什么?


  • 如果一种语言被支持,开发人员就可以在代码编辑、调试、构建和部署,以及核心库和互操作性方面获得良好的体验。并且开发人员不会被要求放弃这些受支持的语言,可以一直在这上面深耕。在大多数情况下,Meta 会建议新项目和服务选用受支持的语言。

  • 对 Meta 来说,全力支持一门语言是一项重大投资,所以对于那些依赖社区支持的“长尾”语言,Meta 的建议是避免在新的应用中使用它们。除非团队已经在该语言上有了非常大的投资。否则,采用这些语言的团队就不得不承担起维护的负担。


回到服务器端语言,Meta 主要用的是 Hack、C++、Rust 和 Python,具体而言:


  • 对性能敏感的后端服务,鼓励使用 C++以及 Rust。

  • 对于 CLI 工具,推荐 Rust。这是今年才有的一个新建议。

  • 对于业务逻辑和相对无状态的应用程序,Hack 生态系统在 Meta 内部拥有最高水平的自动化和最大力度支持,也是内部推荐的语言。

  • 对于数据科学、机器学习应用和 Instagram,Python 仍然是首选语言。

  • 对于特定用例,Meta 会支持其他语言,包括 Java、Erlang、Haskell 和 Go。不过这些语言目前在特定用例之外尚没有得到 Meta 的广泛支持。


那 Meta 是如何总结出这样一份编程语言推荐名单呢?


Eric 强调,他们一般不轻易在这份名单中增加新的语言,因为在 Meta 内部,要规模支持一种编程语言需要大量的工程投资,而且这个成本是很广泛的--不仅仅是由其用户承担。他举了几个例子:


  • 对核心库的支持。独立的服务很少,因此拥有的语言越少,核心库的负担就越小。

  • 安全和隐私。分散的堆栈加大了在服务中建立安全和隐私功能的复杂性。

  • 运营风险。如果某些服务遇到严重问题,则需要立即援助。Meta 在诊断和解决生产问题方面已经积累了大量的专业知识,其事件响应依赖于通过阅读、理解和调试服务以便在重大事件中提供帮助。避免碎片化可以降低运营风险。

  • 专业知识。Meta 建立并维持了大量在每一种语言上都有其专长的工程师。

  • 开发者经验。支持的语言都有团队致力于改善 IDE 支持、构建速度、调试体验等方面。


由此可见,如果没有进行慎重考虑而选择了不够好的编程语言,那 Meta 就有可能在时间成本、效率和生产力方面付出高昂的代价。因此,他们需要对各种语言进行严格审查。


Eric 在文中还特别提到 Rust,Rust 是 Meta 最新的服务器端语言。“自从开始使用 Rust 以来,在 Meta 中使用 Rust 的项目数量增速迅猛。”


了解,Meta 甚至组建了一个专门的 Rust 团队来发展 Meta 内部的 Rust 开发氛围,鼓励对 Rust 和基于 Rust 的项目的开源贡献,并提高对 Rust 社区的参与度。


Eric 表示,Rust 成为 Meta 服务器端支持语言也标志着 Meta 对 Rust 语言生态系统的长期承诺和支持。


参考链接:https://engineering.fb.com/2022/07/27/developer-tools/programming-languages-endorsed-for-server-side-use-at-meta/

2022-07-29 09:457226
用户头像
罗燕珊 AI practitioner | Tech media

发布了 571 篇内容, 共 445.8 次阅读, 收获喜欢 868 次。

关注

评论

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

极客时间运维进阶训练营第三周作业

独钓寒江

Vue内置组件之Transition(一)

Augus

vue.js 11月月更

Python进阶(三十六)Web框架Django项目搭建全过程

No Silver Bullet

Python django 11月月更

Map接口的子类HashMap和LinkedHashMap

共饮一杯无

Java 11月月更 Map集合

React源码分析(一)Fiber

goClient1992

React

谈谈前端性能优化-面试版

loveX001

JavaScript

HTML知识框架 二

默默的成长

html 前端 11月月更

一天梳理完react面试题

beifeng1996

React

看透react源码之感受react的进化

goClient1992

React

服务至上的时代,生态才是ToB软件厂商发展加速的油门

ToB行业头条

Flowable 定时器的各种玩法

江南一点雨

Java spring springboot flowable JavaEE

Python进阶(三十五)Fiddler命令行和HTTP断点调试

No Silver Bullet

Python fiddler 11月月更

经常会采坑的javascript原型应试题

loveX001

JavaScript

CSS知识框架(一)

默默的成长

CSS 前端 11月月更

问:你是如何进行react状态管理方案选择的?

beifeng1996

React

Map接口概述和基本使用

共饮一杯无

Java map 11月月更

Ubuntu部署和体验Nexus3

程序员欣宸

Docker 11月月更 nexus3

高频react面试题自检

beifeng1996

React

Git学习笔记

lxmoe

git 学习笔记 常用命令 11月月更

极客时间运维进阶训练营第三周作业

chenmin

20道前端高频面试题(附答案)

loveX001

JavaScript

Spring 5(四)JdbcTemplate

浅辄

Java Spring5 11月月更

词向量word2vec(图学习参考资料1)

汀丶人工智能

图神经网络 图学习 11月月更

极客时间运维进阶训练营第三周作业

Starry

前端高频面试题合集(中高级必备)

loveX001

JavaScript

React-Hooks源码深度解读

goClient1992

React

Spring 5(三)AOP

浅辄

Java Spring5 11月月更

《数字经济全景白皮书》中国商业银行普惠金融可持续发展能力评价2022

易观分析

普惠金融 数字技术应用

Python进阶(三十四)Python3多线程解读

No Silver Bullet

多线程 Python3 11月月更

问:React的useState和setState到底是同步还是异步呢?

beifeng1996

React

图学习初探Paddle Graph Learning 构建属于自己的图【系列三】

汀丶人工智能

图神经网络 11月月更 随机游走算法 异质图

Meta在服务器端用了哪些编程语言?_语言 & 开发_罗燕珊_InfoQ精选文章