本文是“2021 InfoQ 年度技術盤點與展望”系列文章之一,由直播內容整理而成,重點聚焦編程語言領域在 2022 年的核心趨勢展望,希望能幫助你準確把握 2022 年編程語言領域的核心發展脈絡,在行業內始終保持足夠的技術敏銳度。
“InfoQ 年度技術盤點與展望”是 InfoQ 全年最重要的內容選題之一,將涵蓋架構、AI、大數據、大前端、云計算、數據庫、中間件、操作系統、開源、編程語言十大領域,后續將聚合延展成專題、迷你書、直播周、合集頁面,在 InfoQ 媒體矩陣陸續放出,歡迎大家持續關注。
本期直播嘉賓:
李三紅,阿里云程序語言與編譯器團隊負責人,在虛擬機領域擁有 10+項技術論文/專利。活躍于 JAVA 技術社區,GreenTea JUG(Java User Group) 組織者,QCon, JVMLS,JavaOne, JPoint 等國際會議受邀嘉賓。VMIL'18 程序委員會委員,Java Champion, Java 標準執行委員會(JCP-EC)成員,GraalVM Project Advisory Board 成員。
主持人:三紅老師,我們現在能夠看到整個編程語言領域,在 2022,會有什么核心的發展趨勢嗎?
李三紅:首先感謝一鵬的介紹,我們先聊第一個話題。我開播之前也做了一些功課。IEEE 發布了編程語言的排行榜,我在看 Top 5 編程語言的時候,很有感觸,因為那個榜單基本上能全面反映我們阿里云內部使用語言的基本情況。我說一些具體的例子,比如 C 和 C++,大家都知道,阿里是 Java 大戶。我們很多線上應用都用 Java 寫的,但實際上,像飛天、盤古存儲、OceanBase、PolarDB 等應用,很多都是用 C++ 寫的。Python 我們用的也蠻多的,當然主要是在 AI 領域,和 Tensorflow 相關的。
主持人:Java 在整個 21 年的版本更新速度很快,從 Java16 一直更新到 Java18。那么到了 2022 年,Java 的開發者應該去注意哪些趨勢呢?
李三紅:今年有幾個事情正在發生。在 Java 里,有個概念叫做 long term support,就是 LTS 版本,所謂的長期支持版本。此前,Oracle 規定的是長期支持版本三年更新一次,但現在已經改成兩年一次。兩年一次的 LTS 版本更新意味著,我們可能要付出更多的代價跟進版本支持。尤其是做企業架構、Java 解決方案的同學要關注下,據我所知,國內大部分團隊還停留在 Java8。
主持人:有一個同學在彈幕提問:Node.js 還有前途嗎?三紅老師怎么看?
李三紅:我覺得,任何一個語言都是在特定領域里,解決一個專業問題,沒辦法武斷地說有沒有前途。我舉個例子,Node.js 即便在數據中心也有一定應用,在 Serverless 場景中也是有用的,但是 Node.js 本身是單線程模型,如果要替代 Java,要走的路還是蠻長的,但這不妨礙 Node.js 在它目前的領域保持出色的表現。
主持人:InfoQ 今年在官網上也發起了一個編程語言排行榜,數據顯示,截止到目前,使用 Java 語言的人仍然是最多的,大多數人對 Java 的生態也是最滿意的。三紅老師覺得未來是否會有某些語言威脅到 Java 的統治位置?會是 Go 嗎?
李三紅:Java 不單是生態好,在運維、可觀測性、可監控性方面都是很優秀的。如果我們對比 Java 和 Go,確實業內在大量的嘗試使用 Go。但從阿里實際的應用場景來看,Go 還是主要用在了 Kube.NETes 生態里面。我們這邊也有項目嘗試過用 Go 替代 C++,但碰到了比較大的問題,C 和 C++ 的應用場景大部分是對性能敏感的場景, Go 的主要問題是它會因為 GC 導致暫停,繼而影響上面所有的東西。
主持人:大家普遍認為 C++ 的學習成本最高。未來,在編程語言的設計上,會出現降低學習成本這樣的一個設計趨勢嗎?
李三紅:首先我覺得,編程語言是在塑造你對事物的思考方式,就像 Java ,本質上是面向對象,你需要深刻的掌握 OOP。那么談到學習成本,假設我們沒有很好的掌握 OOP,那么學習 Java 和 C++ 就比較困難。一旦你理解了編程語言本質的思維模式,學習就會變得簡單。
主持人:那么降低學習成本,與放棄部分性能,存在必然的聯系嗎?
李三紅:從我的角度看,可能用開發效率來替換學習成本這個詞更合適些。當你在要求極致性能的時候,可能會損失開發效率。我舉一些例子,比如 Java 的 Unsafe API,它就提供了極致的性能,但它也可能導致 Java 虛擬機莫名其妙的崩潰,開發成本是非常高的,生產效率是不高的。我覺得生產效率和性能確實是個平衡關系,要考慮取舍問題。
主持人:2021 年,Go 語言的火爆有目共睹。但我們今天說點別的,在三紅老師看來,今天的 Go 語言還存在哪些問題?2022 年可能圍繞這些問題而出現的趨勢是什么?
李三紅:曾經有人說,免費的午餐結束了,整個硬件來到了多核時代。多核就意味著,程序需要強并發、高并發,Go 是一個面向協程的語言,把協程內建在了云原生層面去實現,極大提高了開發效率。而且,Go 本身是一個靜態編譯語言,不存在 Run Time,但這是一個令人欣賞的取舍。
我曾經也和 Go 語言的開發團隊做過一些討論,我覺得包括 Go 、Python 等語言在內,未來很重要的一個趨勢,是如何充分發掘硬件性能,做好硬件加速,畢竟硬件性能的增長是趨緩的。
主持人:隨著 Rust 的興起,函數式編程的這個概念重新火起來了,三紅老師怎么看待 2022 年關于 Rust 和函數式編程的問題?
李三紅:我覺得這是挺有意思的話題,函數式編程出來后,我們也看到一些討論,好像函數式編程和 OOP 編程的程序員有時是有些互相鄙視的。從我的調度看,函數式編程有特別多的優點,我特別喜歡函數式編程的“無狀態” —— 數據不可修改,這是非常好的。
在云計算領域里,有一個很重要的技術叫做 Serverless,Serverless 碰到的最大挑戰是什么?就是冷啟動和無狀態。如果是用 Java 開發,第二個請求進來后,Java 就必須重啟一個 Java 虛擬機。這就導致兩個請求之間,我們很難保證啟動速度 —— 這就是有狀態和無狀態的區別。對于函數式編程來說,問題就簡單了,直接 Fork 一下之前的進程就好了。而且函數式編程的代碼的可閱讀性也更好,這點也非常棒。
但函數式編程也有它的問題。Twitter 團隊早期用的是 Ruby,后面全部遷移到 Java 技術棧上,大部分用的是 Scala,Scala 就支持函數式編程。但 Twitter 團隊反饋說,Scala 用起來非常好,但也遇見一些問題:相比于 OOP,函數式編程會創建更多的對象,給內存管理帶來比較大的壓力,對性能也有一些影響。
在我看來,2022 ,主流思想仍然會是面向對象,但函數式編程也有自己的優勢場景。
回到 Rust 本身來談,我覺得它仍然會是 2022 的焦點,我們也在調研 Rust。但 Rust 的是一個問題是,學習成本確實比較高。Rust 暴露了很多底層細節給你,并沒有全部封裝起來。對于開發者而言,能控制的越多,寫起代碼來就越需要細致考慮,把很多細節、原理想的比較明白。這也算是追求性能的代價吧。
主持人:前段時間,Rust 出了個審核團隊離職的新聞,大家應該也都注意到了,三紅老師覺得這種社區治理問題,會影響 Rust 在 2022 年的發展嗎?
李三紅:我覺得社區治理本身是非常關鍵的。我們內部也在說,所有的開源項目本身有三件事是非常重要的:
第一點是開源實現;第二點是開放標準;第三點就是社區的治理,社區的治理支撐著整個語言的健康發展,Java 有幾十年的歷史,在社區治理方面,就確確實實有一些經驗可以供 Rust 借鑒,但 Java 的情況和 Rust 又不太一樣。至少我們在看到審核團隊離職這個新聞后,會想要繼續增多一些對 Rust 的考察。
主持人:李老師如何看待運維可編程化的趨勢?
李三紅:這個問題應該是在說可編程的基礎設施。我覺得這是一個比較正確的方向,但它可能存在質量完全不可控的問題。云原生的 DevOps 講究用可編程的方式去做,有代碼提交,有所謂的 Commit Log,有變更記錄,是通過軟件工程的方式去控制 Infrastructure 的變化,否則就很難規模化復制。
主持人:有好多同學也在問 Python,主要是尋求三紅老師對 Python 工程師的個人發展建議,三紅老師怎么看?
李三紅:Python 在 AI 領域受關注度是非常高的。我覺得 Python 本身只是個工具,如果從技術角度說,它的創造性空間可能確實是比 Java 要小,從我的經驗來談,要學好 Python 還是要關注它解決的問題域,包括 AI 算法、Tensorflow 生態等等。關注通過 Tensorflow 怎么去規模化地解決問題,這可能比關注 Python 語言本身更重要。
主持人:R 語言的發展前景怎么樣?
李三紅:我看到有些同學是直接從 R 語言轉到 Python 的,但沒看到過從 Python 轉到 R 語言的,哈哈。
主持人:好,我們今天的直播到這里就結束了,感謝三紅老師!