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/
點擊底部閱讀原文訪問 InfoQ 官網,獲取更多精彩內容!
在中國ToB市場選一個對的供應商太難了
搞不定移動端性能,全球爆火的 Notion 從 Hybrid 轉向了 Native
離開谷歌的副作用:外面很難找到這麼好用的開發工具
字節將大幅壓縮招聘規模;滴滴被罰 80 億,違法行為持續 7 年;各國軟件開發者薪資統計:中國上榜全球開發者薪酬最低國家名單 | Q 資訊