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