2020年熱門編程語言的發(fā)展方向
時間行至 2020 年,對于編程語言的未來發(fā)展,很多人會更多的期待。因此,我們向多位編程專家征詢了他們對熱門編程語言的看法。
Python
今年 Python 最大的新聞是,其創(chuàng)造者和“終身仁慈獨(dú)裁者(BDFL)”Guido van Rossum 退休了,將 Python 交給了 Python 指導(dǎo)委員會(Python Steering Council)。到目前為止,權(quán)力轉(zhuǎn)移還算順利,正如《Python 編程從入門到實(shí)踐》(Python Crash Course)的作者 Eric Matthes 所認(rèn)為的那樣,這并不足以為奇,因?yàn)?ldquo;長久以來,Guido 一直都能在他自己和在社區(qū)中的角色之間保持平衡。”2020 年也將 終止對 Python 2.7 的支持,這很可能會讓 其反對者感到頭疼。同時,Python 仍然是數(shù)據(jù)科學(xué)的首選語言。
對于 Matthes 而言,Python 令人興奮的一個方面是“在一個長期以來刻意構(gòu)建其多樣性的社區(qū)中,出現(xiàn)了各種有趣而關(guān)鍵的項(xiàng)目。”Python 指導(dǎo)委員會的成員、CPython 的核心開發(fā)人員 Carol Willing 也對這些項(xiàng)目表示了贊賞,比如 Binder 服務(wù),它通過我們的 Jupyter Notebooks 創(chuàng)建一個可執(zhí)行的環(huán)境來促進(jìn)可重復(fù)的研究,尤其是當(dāng)它們超出最初的目標(biāo)時。她指出,Binder“去年被廣泛用于許多 Python 會議的教學(xué)研討班和教程”,Willing 還對 CircuitPython 和 Mu 項(xiàng)目大聲疾呼,問到:“誰不喜歡硬件、閃爍的 LED、傳感器,使用 Mu,一個老少咸宜、用戶友好的編輯器?”
Java
這主要是 Java 方面的好消息。Java Champion Ben Evans 解釋道,“關(guān)于 Java 消亡的謠言再一次被證明不過是平臺批評者的一廂情愿而已。”但這也并非一帆風(fēng)順。正如我們?nèi)ツ晁⒁獾降哪菢樱?018 年 9 月 發(fā)布的 Java 11 帶來了大量的新特性,其中許多特性為容器的使用提供了顯著且明顯的優(yōu)勢。然而,JetBrains 的調(diào)查顯示,這個最新版本 并沒有被廣泛采用,超過 80% 的開發(fā)人員仍然使用 Java 8。Evans 想知道,“這是否意味著人們并沒有像我們所說的那樣在容器中運(yùn)行 Java 呢?還是人們根本不知道 Java 11 在容器方面的優(yōu)勢呢?”
盡管采用速度很慢,但 Java每六個月發(fā)布一次的節(jié)奏 一直在不斷延續(xù):Java 12 于 2019 年 3 月發(fā)布,Java 13 于 9 月發(fā)布。據(jù) Java Champion Trisha Gee 所說,它已經(jīng)開始顯示出它的價(jià)值了:
每個版本都很小,但都是可預(yù)測的。盡管它們并沒有令人興奮的新語言變化,但我們可以看到該語言正在穩(wěn)步向前發(fā)展。此外,它還支持了預(yù)覽特性的想法,我認(rèn)為正如我們所看到的那樣,它對 switch 表達(dá)式非常有效,開發(fā)人員應(yīng)該嘗試該特性,并根據(jù)使用的情況給出真正的反饋,而不是對抽象的概念性的想法進(jìn)行反饋。作為回應(yīng),對 switch 表達(dá)式的語法進(jìn)行了少量地更改,這是有可能的,因?yàn)樗?Java 13 中的一個預(yù)覽特性,而不是一成不變的?,F(xiàn)在,計(jì)劃將這個更新后的語法作為一個可用于生產(chǎn)的特性在 JDK 14 中發(fā)布。
當(dāng)甲骨文將 Java SE 遷移到基于訂閱的模式時,2019 年又帶來了另一個驚喜。但是,正如 《Learning Java,第五版》(現(xiàn)已發(fā)布的早期版本)的合著者 Marc Loy 所指出的那樣,“整個 Java 社區(qū) 對 OpenJDK 的熱情越來越高,它已經(jīng)開始著手處理這個不幸的變化了。”
至于來年,Evans 建議 2020 年需關(guān)注 2019 年的趨勢發(fā)展:
Project Valhalla 的生產(chǎn)版本還有多久才能發(fā)布?提供模式匹配和代數(shù)數(shù)據(jù)類型(Project Amber)的增量策略是否有效?Quarkus 能兌現(xiàn)它的承諾并支撐早期粉絲的信念嗎?2020 年會成為 Kotlin 超越 Android 成為重要排頭兵的一年嗎?這是一個令人興奮的時刻,我們正處于向新事物過渡的階段,而且還有很多事情可以做。
Kotlin
谷歌在 2019 年 5 月宣布,Kotlin 現(xiàn)在是 Android 應(yīng)用程序開發(fā)人員的首選語言,這促進(jìn)了該語言的廣泛采用。盡管許多 Android 開發(fā)人員仍處于向 Kotlin 遷移的過程中,但那些已經(jīng)過渡過來的人都知道它能提供的好處了?!禜ead First Kotlin》 的作者 Dawn 和 David Griffiths 分享了 Kotlin 崛起背后的幾個原因:
對于由 IDE 公司創(chuàng)建的語言,Kotlin 能擁有良好的工具支持也就不足為奇了。用于代碼契約的實(shí)驗(yàn)性 DSL 使開發(fā)人員能夠?yàn)榇a的行為方式提供保證。你的函數(shù)有副作用嗎?它是否能保證返回一個非空值?代碼契約允許我們做出這些承諾,而編譯器可以使用它們來放寬編譯時檢查?,F(xiàn)在,不同 Kotlin 平臺之間的屏障也正在被打破。“expect”/”actual”限定符使開發(fā)人員可以更輕松地編寫跨 Java/Native/JS 環(huán)境的兼容代碼。現(xiàn)在,序列化支持意味著可以更容易地將 JSON 數(shù)據(jù)轉(zhuǎn)換為 Kotlin 對象,反之亦然。
希望 Kotlin 能繼續(xù)保持其驚人高速增長,而不僅僅是在 Android 上。JetBrains 的開發(fā)者權(quán)益團(tuán)隊(duì)負(fù)責(zé)人 Hadi Hariri 指出 Kotlin/Everywhere(一系列社區(qū)主導(dǎo)的活動,在這些活動中,我們可以在 Android、谷歌云平臺和多平臺開發(fā)中學(xué)習(xí) Kotlin 的基本知識和最佳實(shí)踐)的成功,就是最好的證明:“從 5 月到 11 月,我們已經(jīng)成功地覆蓋了 86 個國家的近 30000 人。2019 年,KotlinConf 連續(xù)三年售罄,吸引了 1700 多名與會者。這尤其表明,人們對這門語言的興趣和接受程度正在增長。”
Go
當(dāng) Go 程序員(Gopher)回顧 2019 年時,他們很可能會記得“try”提案的傳奇故事。Go 的開發(fā)者兼作者 Jon Bodner 解釋道:
對于 Go 最常見的抱怨之一是錯誤處理過于冗長。因此在 6 月初,Go 的核心開發(fā)人員們提議 添加一個新的內(nèi)置函數(shù) try。并發(fā)布了一個 GitHub issue 來討論這個新特性。不到一個月,就有近 800 條評論,其中大多數(shù)都是否定的。反對這一新特性的人認(rèn)為,這一變化使代碼變得太“魔法”,并使邏輯流程變得模糊了。在審查了反饋之后,Go 團(tuán)隊(duì)將提案標(biāo)記為關(guān)閉,并于 7 月 16 日拒絕掉了該提案。
在這個過程中值得注意的不是這個特性的失敗,而是,正如 Bodner 所描述的那樣,“過程的發(fā)生方式:提出一個特性,討論也是受到尊重的,但是許多人覺得這個變更與 Go 的風(fēng)格不一致。最后,掌管語言的人決定尊重大多數(shù)人的意見。這就是開發(fā)者所說的社區(qū)。”
2020 年,Go 的契約規(guī)范(也就是眾所周知的 泛型提案)應(yīng)該會更加清晰。Bodner 說,“看起來 Go 將使用一種與其他語言略有不同的方法來實(shí)現(xiàn)泛型,但是這種方法非常適合 Go 的習(xí)慣用法。”它將有望使 Go 在添加泛型特性(開發(fā)人員在其他語言中發(fā)現(xiàn)泛型非常有用)的同時,仍能保持其慣用的風(fēng)格。
Rust
我們采訪了《Programming Rust》的合著者 Jim Blandy,以了解他對 Rust 的發(fā)展看法在 2019 年發(fā)生了怎么的變化。去年,他指出,“Rust 長期以來一直以這樣或那樣的形式支持異步編程,但是異步函數(shù)為這種代碼提供了一種語法,這是對 Rust 之前語法的重大改進(jìn)。”他對 Rust 語法進(jìn)行改進(jìn)的愿望實(shí)現(xiàn)了嗎?是的,最終:Blandy 解釋到 async/await 語法直到 2019 年 11 月 7 日發(fā)布的 1.39 版才趨于穩(wěn)定。“最初,我們希望 async/await 語法可以成為 Rust 2018 版的一部分,但它需要花費(fèi)更長的時間才能把事情做好。”盡管如此,他仍然對 async 在 2020 年對 Rust 的意義寄予厚望:“將 async 集成到語言中,可以讓借用檢查器(borrow checker)了解我們在做什么,因此異步代碼看起來就像是慣用的 Rust。”正如 Blandy 所指出的那樣,Rust 生態(tài)系統(tǒng)正在迅速采取行動,以利用該語言的新表現(xiàn)力。
Rust 社區(qū)對 WebAssembly 也很感興趣,今年 WebAssembly 成為了 C/FFI 的理論替代品 ,可用在需要具有可移植的、高性能的模塊的生態(tài)系統(tǒng)中。正如 Rust 專家 Nathan Stocks 所說:“我么也可以使用輕量級的沙箱!”令 Stocks 印象最深的是“該理論已經(jīng)被原型化并被成功地證明了”
以前,我曾把 WebAssembly 純粹視為一個編譯目標(biāo),以便在瀏覽器中運(yùn)行非 JS 語言的代碼。添加這種可以從瀏覽器之外的任何語言中使用 Web 程序集的能力是令人不寒而栗的。
Swift
Swift 去年最大的事件是 SwiftUI 和 Swift for TensorFlow 的發(fā)布。SwiftUI 是蘋果公司的最新框架,可用于在所有蘋果設(shè)備上設(shè)計(jì)用戶界面,Swift for TensorFlow 是一個將谷歌 TensorFlow 框架和 Swift 集成在一起的深度學(xué)習(xí)和可微分編程(differentiable programming )平臺。正如 Timirah James 所解釋的那樣,SwiftUI“已經(jīng)憑借其聲明式的特性在開發(fā)者中獲得了很大的吸引力(理應(yīng)如此),并且已經(jīng)被視為是未來 UIKit 的潛在繼任者。”至于 Swift for TensorFlow,Paris Buttfield-Addison 稱之為“Swift 的一個全新用途。”他解釋道,“Swift 一直是一種優(yōu)秀的應(yīng)用程序開發(fā)和系統(tǒng)編程語言,也是一種很有前途的 Web 和后端開發(fā)語言,但現(xiàn)在,可以使用 Swift for TensorFlow 了,并且它還是一個功能強(qiáng)大的 ML 框架。”原因如下:
Swift for TensorFlow 有一個開發(fā)團(tuán)隊(duì),其中包括 Swift 的創(chuàng)始人 Chris Lattner,并且它可以為我們提供(或?qū)⒃谕瓿珊筇峁C(jī)器學(xué)習(xí)和數(shù)值計(jì)算所需的一切。最令人驚訝的是,它對帶有自動微分(automatic differentiation)的 可微分編程(differentiable programming) 提供了完全一流的支持,這是由 Swift 的底層編譯器框架和設(shè)計(jì)來實(shí)現(xiàn)的。全語言可微分編程將使之前不可能的事情成為可能:一個很好的例子是,當(dāng)我們構(gòu)建神經(jīng)網(wǎng)絡(luò)時,可以使用標(biāo)準(zhǔn)的編程調(diào)試器逐步進(jìn)行反向傳播并調(diào)試派生類。Swift for TensorFlow 還為 Swift 提供了完整的 Python 支持,使數(shù)據(jù)科學(xué)家可以將他們所需要的有用且熟悉的 Python 框架與簡潔而富有表現(xiàn)力的 Swift 代碼進(jìn)行混合和匹配。
展望未來,看到 Swift 選擇的新方向,James 和 Buttfield Addison 都感到很興奮,James 指出“ 在不同的社區(qū)和除移動領(lǐng)域之外的其他技術(shù)棧中,特別是在無服務(wù)器領(lǐng)域中,Swift 的采用非常迅速”,Buttfield Addison 稱之為“令人驚嘆的 Web 開發(fā)框架,比如 Kitura,以及各種針對細(xì)分領(lǐng)域的驚人的框架,比如 SwiftPlot,它是 Python 中無處不在的 Matplotlib 的 Swift 原生版本。”
未來是什么?
變化是不可避免的,并且隨著編程語言繼續(xù)向云、微服務(wù)、大數(shù)據(jù)和機(jī)器學(xué)習(xí)中的新趨勢優(yōu)化傾斜,每種語言及其生態(tài)系統(tǒng)都將以其獨(dú)特的方式繼續(xù)適應(yīng)。某些語言可能會在 2020 年發(fā)布大版本(C++ 20 將于今年夏天發(fā)布,Scala 3 有望在 2020 年底發(fā)布)。但有一點(diǎn)很清楚,即使是最小的變更也可能會在程序員的日常生活中引起軒然大波。