對比 Go 語言,Kotlin 有什麼優勢和劣勢?


Kotlin的優勢是在Java生態上,大量信手拈來的資源,也可以讓團隊平緩的過渡。

但是這也是雙刃劍,就是使Kotlin成為錦上添花的角色,無論項目還是招聘都還是先考考你java怎麼樣啊,這就使得團隊裡面的人(包括工程能力強的牛人)可以光明正大的偷懶,比如並不願意好好學Kotlin,出了問題也沒什麼。會讓喜愛並投資了大量時間精力去學Kotlin,去實踐Kotlin的人心冷的,因為老闆或者領導往往不會覺得你多弄了點Kotlin就怎麼樣了,不就是個工具嘛。反正公司核心都是Java撐著的。

反觀Go是獨立生態,如果不好好學,搞砸了就不好了。所以既然來到Go團隊的人都會好好學,好好搞,這種氣氛是喜愛技術的人嚮往的。

Kotlin讓我想到Scala,記得以前知乎有阿里的人回答問題說,阿里很多大數據技術牛人,也對Scala一知半解,基本就是Spark用到哪裡就稍微學點唄,你說,如果你是一個喜愛Scala技術的人,還用業餘時間大量學習了Scala的語言+工程方面的東西,會特別喜歡在這種團隊嗎?說不定那些大數據技術大牛遇到scala問題還會到你這裡免費取經,哈哈,當然你也可以這麼想,各取所需,你也可以更方便的免費找那些大牛取經。但是,如果你是實用主義,也會變成和那些大牛一樣的,精力會放在解決工程問題上的,Scala已經不重要了。為什麼會這樣呢,根本原因就是Scala是依託了Java平台。

而用了像Go,Python這種獨立生態的語言,學習語言實踐語言是和解決工程問題緊密相關的,比較單純。很多技術人員恐怕比較喜歡這種感覺吧。

Go和Python社區的人如果哪位說自己工程能力很強,但就是不喜歡學Go和Python,代碼寫的也跟初學者一樣漏洞多多,會被鄙視的吧。但是我猜公司裡面用Kotlin和Scala的傢伙,就可以光明正大的說,我對Kotlin和Scala不感興趣,我只對解決工程問題感興趣,哈哈。

---------------------------------------------------------------------------------------------------------------------

成功的把題目從Go和Kotlin歪到我喜歡的Scala上,不錯不錯~


不說優劣勢,就說各自一條對我而言最大的感覺:

Go確實崇尚一條簡潔之道,骨子裡融進了並發。

Kotlin後於Scala,但又想簡潔又想面面俱到通吃,隱約感覺這條路走不通。

現在看起來「甜甜」的新語言不少,然並卵,我現在只關注能否解決問題,對於新不新、美不美、強不強、快不快、全不全等,說實在,如果無助於解決問題那就都不重要。


5.21編輯:

『替代』C和『取代』C是不一樣的好不,也就是大部分時候C程序可以用Go來寫,比如絕大部分GNU工具,這些東西的數量遠比操作系統本身多。而不是所有的C領域,也就是還有很多C的核心領域Go不能寫的。

另外Kotlin可以『取代』Java,是說Java能寫的Kotlin都能寫。(還好原回答本來用詞就嚴謹)

其實我就寫了個「系統工具」,評論里就逐漸變成系統級開發了。C寫的大部分東西也不是系統本身,其實是以前很多不適合用C寫的東西都用C/C++寫了,後來逐漸被Perl Java和其他東西取代,Go也類似。

雖然不是Rust那種Bare Metal,但是開發成本低很多。 而且Go是C語言大師Rob Pike寫的,其實定位已經很接近底層了,而體驗盡量不那麼底層——這是Go的設計初衷。

---

其實這倆語言交集不是很大。

Go更接近系統工具開發,一般你可以用它來替代C,寫一些非常快的程序。Docker就是用Go寫的。也可以寫一些業務不是特別複雜得高性能Web Server,一些實時系統等等。

Kotlin基本上可以完全取代Java(完全取代的意思不是將要取代,是說每個Java項目『可以』無縫遷移到Kotlin,但大部分項目估計並不會這麼做)基本上還是Java的老路,企業級開發——不管是應用程序還是Web Service,反正Java的場景就是Kotlin的場景。

值得一提的是還不能用Java8的安卓用Kotlin效果會非常好。

反正Java和Kotlin感覺就像ES5和ES6,基本可以視作同一個語言,還可以混用。


要點差異有三,都是 Kotlin 的優勢:

  1. Kotlin 是多範式語言,對泛型與函數式有良好支持;Go 對泛型支持很弱,甚至可以說不支持:連通用的集合高階函數三板斧都不便實現。
  2. 鑒於上一條,Kotlin 是現代靜態類型語言(OOP/FP/GP是標配);Go 還停留在上一代。
  3. Kotlin 支持多平台:Native、Android、Java、JavaScript。其中的 Native 平台相當於 Go 運行的平台, Kotlin 比 Go 不僅多了 JVM 以及 JavaScript 平台支持,還已成為 Android 平台的一等開發語言。

如果說劣勢,主要有:

  1. 親爹(JetBrains)很有名氣,但尚不及 Go 的親爹(谷歌)。當然現在谷歌也算是 Kotlin 乾爹了。
  2. 流行的比 Go 和 Swift 晚(尤其是 Kotlin Native),錯過了不少時機。
  3. 缺少的不是 Killer App,而是缺少像 Docker 這樣的殺手級生態。


Kotlin有泛型,Go沒有

這直接把Go從一個其他地方看著感覺蠻不錯的語言在我心中的印象拉到谷底


Kotlin的最大優勢,Go不是官方支持的android開發語言…


Kotlin 最大的優勢是它是基於jvm的編程語言,可以直接與 Java 程序互調用而不需要通過IPC或RPC

Android系統發展這麼多年不太可能換體系了,Java官司打了這麼久,Google 最終選擇 kotlin 作為新的編程語言,而不是 go


Kotlin是一個跨編譯平台的語言。

現在我們比較熟悉的是JVM平台的Kotlin/JVM,但實際上還有Kotlin/javascript和正在開發的Kotlin/Native。

對不同編譯平台的Kotlin來說,各方面差異比較大,所以在此分開討論。

先講講大家最熟悉的Kotlin/JVM。

go語言的設計理念與Java是不同的,go語言的工具都更傾向於輕量級,go語言的函數定義得精確簡單(多值返回是個好東西),go語言的協程消耗小性能高(甩Java幾條街)。這決定了go語言更適於高性能伺服器領域,其目標應該是原來用Java或C/C++寫的那些負荷比較大的伺服器。

但與JVM提供的豐富的工具和功能完善的框架相比,go語言也是會顯得有些麻煩的。但go語言還年輕,成熟的工具鏈和框架在未來會越來越完善,也許成為伺服器端首選語言也說不定。

而個人認為,Kotlin/JVM的出現就是為了能夠讓Kotlin能夠繼承Java的豐富資源。Kotlin/JVM基本上就是一個充滿語法糖的Java,它讓原來Java程序的開發效率大大提升了,但是性能和相關特性始終是無法逾越JVM的。

所以可以說,在伺服器領域,go是革命派,而Kotlin/JVM是改良派。孰是孰非就看時代了。

對於Kotlin/javascript,個人認為它的出現是為了完善Kotlin的跨領域性。因為Kotlin設計的一個初衷就是希望它成為跨各個領域的語言,能被用在各個地方。而Kotlin/javascript就實現了在腳本上使用Kotlin的願望。它的首要目標應該是網頁開發吧(雖然聽說也有對nodeJS的支持但我覺得真不應該用它寫伺服器),所以在此跟go風馬牛不相及,就不深入討論了。

至於Kotlin/Native嘛。我感覺這恐怕是Jetsbrains的Kotlin宏偉計劃中的重要部分了,Kotlin/Native的表現將直接決定這門語言將來是被釘死在JVM上還是飛越成為王牌級語言。要知道Kotlin/Native可是同時盯著IOS開發、科學計算領域、遊戲開發領域和嵌入式去的!

Kotlin/Native和go之間的差異嘛:現在已知的是Kotlin的語法更傾向於魔幻型的,而go的更傾向於樸素型的。另外據說Kotlin/Native將採取在不同平台上分別採用不同的內存管理機制,這意味著Kotlin在內存方面的能力將可能優於go語言。另外,三個Kotlin編譯平台將可以實現某些庫的共用,這意味著在庫依賴方面Kotlin也會比go要有差異(go語言的想法是不要依賴庫,所以在此不妄做評判)。

但Kotlin/Native尚處於開發的初期階段,正式版可能還要過一年才能出,說什麼都為時尚早啦。

所以總地說,go應該是死盯伺服器領域了,而Kotlin則是什麼領域都想佔領。現在伺服器領域應該還大多用JVM(伺服器求穩為主,更新迭代慢),未來是什麼樣就不知道嘞……

最後還是想說,各個語言其實都是術業有專攻的啦。把任何兩個語言相比較都是沒法說個誰一定好誰一定壞的。找到一門自己寫得舒服順手的語言就好。(我喜歡Kotlin)


go是一個很顯然的特化語言,有很多關鍵特性是缺失的,當然這些缺失對使用者來說並不是缺點(甚至是優點)。

一個工具有一個工具的適用範圍,討論範圍之外的事情並不公平。

kotlin也是同樣,簡化了java的一些繁瑣之處,但是也存在一些一些用kotlin實現起來更繁瑣的地方。

要說的話,就是go的領域太窄了點。


如果早出來幾年,kafka,spark會不會用kotlin?


kotlin的爹是專門做ide的,


kt 的優勢是語言超棒, 但java程序的工程管理很麻煩。jvm也巨重, 希望以後kotlin-native有像npm gulp cargo 一樣的構建工具 ,有node或go那樣的標準庫。

go除了語言本身,其它都很贊了。


推薦閱讀:

如何評價 Android 官方支持 Kotlin 語言?
如何看待 Google 宣布 Kotlin 正式成為 Android 的開發語言?

TAG:編程語言 | Go語言 | Kotlin |