聲明:本文來自於微信公眾號CSDN(ID:CSDNnews),作者:Md Kamaruzzaman,授權站長之家轉載發布。
【CSDN 編者按】「如果我們把人類文明想像成汽車的話,那麼軟體開發行業就相當於汽車的引擎,程式語言就像引擎的燃料。」作為一名開發者,需跟隨技術潮流的發展來學習新技術。 2020 年,你有計劃新學一門程式語言嗎?
本文作者從一名架構師的角度,詳細分析了 7 種現代程式語言的優點與功能,你對哪門語言最感興趣呢?
作者 | Md Kamaruzzaman,軟體架構師
譯者 | 彎月,責編 | 伍杏玲
出品 | CSDN(ID:CSDNnews)
以下為譯文:
如果我們把人類文明想像成汽車的話,那麼軟體開發行業就相當於汽車的引擎,而程式語言就像引擎的燃料。作為一名開發者,今年你應該學習哪種程式語言呢?
學習一種新的程式語言無疑是時間、精力和智力上的巨大投資, 但是學習一種新的程式語言可以提升你的軟體開發技術力,促進你的職業發展。
在這裡,我將獻上一份現代程式語言的列表,這些語言不僅有助於提高你的生產力,而且還可以促進你的職業發展,並讓你成長為更優秀的開發人員。這份列表還涵蓋了非常廣泛的領域:系統編程、應用程式開發、Web開發、科學計算等。
什麼是現代程式語言?
「現代程式語言」這個說法本身就很含糊。許多人認為Python和JavaScript等語言是現代程式語言,還認為Java是一種古老的程式語言。實際上,這幾種語言大約在同一時間出現: 1995 年。
大多數主流程式語言是上個世紀開發的:七十年代(如C)、八十年代(如C ++)、九十年代(如Java、Python、JavaScript)。這些語言在設計上並沒有考慮現代軟體開發生態系統:多核CPU、GPU、快速的網際網路、行動裝置、容器和雲等。儘管許多語言中的許多功能都已進行一些改進,如並發等,而且在不斷調整自己以適應時代,但它們依然保留了向後兼容性,無法拋棄那些過時的舊功能。
在這方面,Python就做得很好(某種意義上也未必是好事),Python2 和Python3 兩者之間有明確的分界線。很多語言常常會為解決同一個問題提供十餘種的方法,同時又沒有顧及到開發人員的感受。根據StackOverflow的開發人員調查,大多數舊時的主流程式語言在「最可怕的語言」排名都名列前茅:
如果非要在新舊程式語言之間劃個界限的話,那麼應該是 2007 年 6 月 29 日,也就是第一臺iPhone發行的時候。在這之後,程式語言界發生了很大變化。因此,在本文的列表中,我只考慮 2007 年以後的程式語言。
為什麼要學習新語言?
首先,現代程式語言充分利用現代計算機硬體(多核CPU、GPU、TPU)、行動裝置、大量數據、高速網際網路、容器和雲的優勢。大多數現代程式語言會關注開發人員的體驗,比如:
簡潔明了的代碼(減少樣板代碼)
內置的並發支持
空指針安全
類型推斷
簡潔的功能集
降低學習難度
融合所有編程範例的最佳功能
本文列表的許多程式語言都帶有革命性地變化,並將永久地改變軟體行業。一些已成為主流程式語言,還有一些則有望取得突破。因此選擇這些語言作為第二種程式語言是明智的做法。
Rust
一直以來,系統程式語言環境主要由靠近硬體的語言(如C、C ++等)主導。儘管它們可以完全控制程序和硬體,但是它們缺乏內存安全性。即使它們支持並發,使用C/C ++編寫並發程序也很困難,因為沒有並發安全性。還有一些流行的程式語言是解釋性語言,例如Java、Python、Haskell。這些語言具備安全性,但需要龐大的運行時或虛擬機。由於它們的運行時間長,因此Java等語言不適合於系統編程。
許多人曾嘗試將C/C ++的功能與Java、Haskell的安全性相結合。然而,Rust才是第一個成功實現了這一點的程式語言。
Graydon Hoare在業餘項目中開發出了Rust,他的靈感來自研究程式語言Cyclone。Rust是開源的,由Mozilla與許多其他公司和社區一起領導這門語言的開發。Rust於 2015 年首次發布,並很快引起了社區的關注。
主要特徵:
通過所有權和借用概念提供內存安全和並發安全。
內存安全和並發安全在編譯時確保,即如果程序代碼可以編譯,那麼內存既安全又沒有數據競爭。這是Rust最吸引人的功能。
它還提供了Haskell中元編程的表現力。憑藉不可變的數據結構和功能編程功能,Rust提供了功能並發和數據並發。
Rust的速度非常快,純Rust的性能甚至優於純C。
在沒有運行時的情況下,Rust可以完全控制現代硬體(TPU、GPU、多核CPU)。
Rust具有LLVM支持。因此,Rust提供一流的與WebAssembly的互操作性,而且Web代碼也非常快。
流行度:
自 2015 年首次亮相以來,Rust已被開發人員廣泛接受,並在StackOverflow開發人員調查中連續四年(2016、2017、2018、2019)被評選為最受歡迎的語言:
根據GitHub Octoverse的調查,Rust是運行速度第二快的語言,僅次於Dart:
此外,根據程式語言流行度排名網站PyPl的數據,Rust排名第 18 位,並呈上升趨勢:
對比Rust提供的功能集,我們就會明白為什麼微軟、亞馬遜、Google等科技巨頭相繼宣布投資Rust作為一種長期的系統程式語言。
根據Google統計的趨勢,在過去的 5 年中,Rust的熱度每年都在增加。
主要用途:
主要競爭對手:
Go
在本世紀初,Google面臨兩個擴展問題:開發擴展和應用程式擴展。開發擴展問題指的是他們不能僅通過投入開發人員的方式來添加更多功能。應用程式擴展問題則指他們無法開發出一款能夠擴展到Google級別的計算機集群的應用程式。
所以在 2007 年左右,Google創建了一種新的程式語言,用於解決這兩個擴展問題。兩位才華橫溢的Google軟體工程師Rob Pike(UTF-8)和Ken Thompson(UNIX OS)創建了一種新語言。
2012 年,Google正式發布了第一版的Go程式語言。Go是一種系統程式語言,但與Rust不同,它還具有Runtime和垃圾收集器(幾兆字節)。但是與Java或Python不同,這個Runtime包含了生成的代碼。最後,Go生成了一個本地的二進位代碼,可以在沒有附加依賴項或運行時的情況下在計算機中運行。
主要特徵:
Go具有一流的並發支持。Go不通過線程和鎖提供「共享內存」並發性,因為編程難度太大。相反,它提供了基於CSP的消息傳遞並發性(基於Tony Hoare的論文)。Go使用「 Goroutine」(輕量級綠色線程)和「 Channel」進行消息傳遞。
Go最大的殺手級功能是:簡單,它是最簡單的系統程式語言。新手軟體開發人員只需幾天就可以編寫高效的代碼,就像Python一樣。有些大規模的雲原生項目(如Kubernetes、Docker)都是用Go編寫的。
Go還內置了垃圾收集器,這意味著開發人員無需擔心C/C++中的內存管理問題。
Google投入了大量資金打造Go。因此Go擁有大量的工具支持。新手Go開發人員擁有大量的工具生態系統。
一般,開發人員80%的時間都花在了維護現有代碼上,用於編寫新代碼的時間只佔20%。由於其簡單性,Go在語言維護方面表現出色。如今,Go在業務應用程式中大量使用。
流行度:
Go一問世就受到了軟體開發社區熱烈的歡迎。 2009 年- 2018 年,Go一直在TIOBE程式語言排行榜上徘徊。Go的成功為Rust等新一代程式語言鋪平了道路。
如今,Go已是主流程式語言。最近,Go團隊宣布了有關「Go 2」的消息,這門程式語言的發展會更加穩固。
幾乎在所有的流行程式語言排行榜中,Go的排名都很高,已超過許多現有的語言。自 2019 年 12 月以來,在TIOBE指數排名中,Go名列第 15 位:
根據StackOverFlow的調查,十大最受喜愛的程式語言中,Go也位列其中:
此外,根據GitHub的數據,Go也是十大發展最迅速的語言之一:
Google趨勢顯示,在過去的 5 年中,Go的熱度每年都在增加。
主要用途:
系統編程
Serverless 計算
商業應用
雲原生開發
主要競爭對手: