Meta软件工程经理EricGarcia在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语言生态系统的长期承诺和支持。