為這是每一種語言的最終命運(yùn)都是:覆滅湮沒,準(zhǔn)確地說是越來越少地被利用到新項(xiàng)目中。問題是:最后誰會(huì)取代它們呢?
上周我們?cè)?nbsp;InfoQ 一篇同樣類型的文章。至少,這篇文章說出來這個(gè)語言可能的替代者 Kotlin。這讓我對(duì) JVM 的語言現(xiàn)狀和趨勢(shì)有了許多思考:注意,語言的趨勢(shì)與每個(gè)語言的技術(shù)優(yōu)點(diǎn)和缺點(diǎn)無關(guān)。
我于 2001 年年底開始做 Java 開發(fā),當(dāng)時(shí),Java 是真的很酷。每一個(gè)新開發(fā)者都想使用所謂的新技術(shù):無論是 .NET 還是 Java,而有經(jīng)驗(yàn)一些的開發(fā)者使用的是 COBOL。我在學(xué)校學(xué)習(xí)了 C 和 C ,所以 Java 內(nèi)存管理對(duì)于我來說非常簡(jiǎn)單。我對(duì) Java 很滿意,但并不是每個(gè)人都這么認(rèn)為。
Groovy 誕生于 2003 年。但我不記得我是什么時(shí)候開始學(xué)習(xí)它的。而實(shí)際上:使用它后我不再需要一門腳本語言了。在具有多個(gè)開發(fā)團(tuán)隊(duì)并長(zhǎng)時(shí)間開發(fā)企業(yè)級(jí)應(yīng)用程序的背景之下,靜態(tài)類型相比動(dòng)態(tài)類型擁有巨大優(yōu)勢(shì)。尤其在進(jìn)行產(chǎn)品測(cè)試以檢查類型系統(tǒng)時(shí)。我唯一需要?jiǎng)?chuàng)建腳本的時(shí)候,是作為 WebSphere 管理員時(shí):選擇 Python 還是 TCL。
一年之后,Scala在2004年被我接受。 我不記得是什么時(shí)候以及是怎樣知道Scala的,但那時(shí)候確實(shí)是很晚了。與Groovy相反,我決定試試它。主要的理由是我長(zhǎng)期以來對(duì)創(chuàng)建“更好”的代碼(更好的可讀性和可維護(hù)性)感興趣。Scala是靜態(tài)類型的,它更像我正在尋找的東西。我報(bào)了Coursera課程Scala中的函數(shù)式編程原理。它有三個(gè)主要的影響:
它讓我質(zhì)疑我寫Java代碼的方式。 例如,為什么當(dāng)我設(shè)計(jì)類時(shí)要自動(dòng)生成getter和setter方法?
對(duì)大多數(shù)開發(fā)者來說,我覺得Scala很容易寫出缺乏可讀性的的代碼——包括我。
我開始尋找其他替代語言。
在 Groovy 和 Scala 之后,第二代(如果你把 Java 也算做第一代的話,則是第三代)JVM 語言包括:
JetBrains Kotlin
Red Hat Ceylon
Eclipse eXtend
大致瀏覽一遍后,我確信他們沒有太多的吸引力,不值得我投入時(shí)間。
幾年前,我決定自學(xué)基本的 Android 開發(fā),以便能夠了解移動(dòng)開發(fā)者的開發(fā)環(huán)境。好家伙,即使有多年開發(fā) Java EE 和 Spring 應(yīng)用程序的經(jīng)驗(yàn),但它還真給我一個(gè)驚喜了 - 還不是愉快的那種。這就像回到過去十年前那樣的開發(fā)體驗(yàn),Android API 非常低級(jí),更別說在本地測(cè)試應(yīng)用程序。經(jīng)過快速的搜索相關(guān)信息,我發(fā)現(xiàn) Kotlin 在很多地方被提到,所以最后決定試一試。我立即愛上 Kotlin 了,得虧它的擴(kuò)展功能,我可以將現(xiàn)有的垃圾 API 改進(jìn)得更好,甚至更優(yōu)雅。我開始更多的挖掘這門語言,并開始在服務(wù)器端項(xiàng)目中使用 Kotlin。然后,Spring 框架宣布了與 Kotlin 的整合。然后在 Google I/O 大會(huì)上,Google 也宣布在 Android 開發(fā)中官方支持 Kotlin。
這篇文章基于我個(gè)人的體驗(yàn)和觀點(diǎn)。如果你更喜歡閱讀你贊同的帖子,請(qǐng)隨時(shí)停止閱讀。
除了我自己的經(jīng)驗(yàn),這些語言的現(xiàn)狀是如何呢? 我在Google Trends中進(jìn)行了一個(gè)快速搜索。
有幾件有趣的事情值得關(guān)注:
Google已經(jīng)識(shí)別到諸如Scala、Groovy和Kotlin作為'編程語言'的搜索關(guān)鍵詞,而沒有把Ceylon和eXtend作為關(guān)鍵詞。對(duì)于Ceylon來說,我只能假裝它是因?yàn)镃eylon是一個(gè)受歡迎的地方。對(duì)于eXtend,恐怕是因?yàn)榇蠹液苌僭贕oogle中搜索它。
Scala是迄今為止最受歡迎的,其次是Groovy和Kotlin。我沒有關(guān)于Scala的真實(shí)線路圖。
五月份的Kotlin搜索巔峰是與谷歌在Google I/O上的支持公告相關(guān)的。
大多數(shù)搜索Scala和Kotlin的數(shù)據(jù)來自中國(guó),考慮到地理位置上的平衡,Groovy更勝一籌。
Scala搜索與術(shù)語“Spark”強(qiáng)烈相關(guān),Kotlin搜索與術(shù)語“Android”相關(guān)。
進(jìn)一步挖掘可能會(huì)發(fā)現(xiàn)有趣的事實(shí):
xTend沒有死,因?yàn)樗鼜奈椿钸^。從來沒有讀過任何關(guān)于它的帖子。從來沒有聽過一個(gè)關(guān)于它的峰會(huì)。
2017年,紅帽公司將Ceylon捐贈(zèng)給Eclipse基金會(huì),創(chuàng)建了Eclipse Ceylon。將軟件贈(zèng)送給基金會(huì)的私人行為可能會(huì)被不同的方式解釋。在這種情況下,盡管圍繞這一舉措進(jìn)行了可靠的談判,但這并不意味著Ceylon的未來。
2015年,Pivotal停止贊助Groovy,并轉(zhuǎn)移到Apache基金會(huì)。雖然我相信Groovy有足夠的支持基礎(chǔ),并且在JVM腳本上也是獨(dú)一無二的,但這并不是一個(gè)好兆頭。這與Groovy核心創(chuàng)建者的提交頻率相關(guān):它們的提交次數(shù)急劇減少 - 到某些停止點(diǎn)。
有趣的是,Scala和Kotlin最近都入侵了其他領(lǐng)域,并將其翻譯成JavaScript并編譯成原生代碼。
在Java中,JEP 286是使用類型推斷來增強(qiáng)語言的提議,這是Scala和Kotlin已經(jīng)提供的功能。然而,它僅限于局部變量。
有意思的是,通過保留語言的一小部分,來努力提升Scala編譯時(shí)間。然后提出問題,為什么要保持Scala,如果你拋棄它強(qiáng)大的功能(如宏)?
我并不擅長(zhǎng)預(yù)測(cè),但這是我的一些展望:
1、Groovy擁有自己的強(qiáng)項(xiàng)——腳本,這就留下Java、Scala和Kotlin在服務(wù)器端的JVM上為純應(yīng)用程序開發(fā)而爭(zhēng)奪占用率。
2、Scala也開創(chuàng)了自己的領(lǐng)域。Scala開發(fā)人員通常認(rèn)為這種語言優(yōu)于Java(或Kotlin),而不會(huì)轉(zhuǎn)移到另一種語言。然而,由于Spring和Google的公告,Kotlin可能會(huì)成為對(duì)Java不滿意的開發(fā)人員的Scala的替代。
3、Kotlin已在Android戰(zhàn)場(chǎng)上獲勝。Scala過去忽視了這個(gè)領(lǐng)域,并且不會(huì)在將來中繼續(xù)投入,因此Kotlin在這場(chǎng)比賽中已經(jīng)遙遙領(lǐng)先了。
4、Kotlin在手機(jī)上的崛起不是一個(gè)預(yù)期中的舉動(dòng),而是一個(gè)不錯(cuò)的意想不到的驚喜。JetBrains一旦注意到這個(gè)趨勢(shì)就把它用作了前進(jìn)的路標(biāo)。
5、Kotlin與Java的互操作性是殺手級(jí)別的功能,這可能會(huì)說服管理者將遺留項(xiàng)目遷移到Kotlin上然后開始新項(xiàng)目。正如Java的不間斷的后向兼容性一樣。
親愛的讀者,盡管(特別是)你不同意上述的觀點(diǎn),但我將對(duì)你的意見非常感興趣。只要你有禮貌地提供事實(shí),并證實(shí)你的觀點(diǎn)即可。
來自:開源中國(guó)社區(qū)
鏈接:https://www.oschina.net/translate/the-rise-and-fall-of-jvm-languages
原文:https://dzone.com/articles/the-rise-and-fall-of-jvm-languages
程序員大咖整理發(fā)布,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)
聯(lián)系客服