王權沒有永恆,程式語言自然也不例外。不管何時人氣榜冠軍的程式語言,其都面臨著同樣的挑戰。不過各類後起之秀也都憑藉著自身設計證明,如Python所擁有的編程便捷性、強大的數學與科學運算能力以及龐大的第三方庫正是一款優秀語言所必須具備的特質,而並非「加分項」。
Rust語言
R語言主要用於統計分析、繪圖、數據挖掘,可在多種平台下運行,包括UNIX、Windows和MacOS。R主要是以命令行操作,也有圖形用戶介面支持。
R語言優點:
具有包括神經網絡、非線性回歸模型、系統、繪圖和幾乎所有數量和統計應用功能的開源開發包。 具有全面的、內置的統計功能和方法,擅長處理矩陣代數。 優秀的數據可視化功能。
R語言缺點:
不是一種快速語言,並且沒有很好的通用性,雖然對於統計和數據科學而言R語言是一個很好的選擇,但是對於通用編程而言並不友好。 R語言的一些不尋常的特點和大多數的語言相比顯得有些古怪,譬如:從1開始索引,使用多個賦值操作符,非常規的數據結構。
Go語言:
Go(Golang)是Google開發的一種靜態強類型、編譯型、並髮型,並具有垃圾回收功能的程式語言。
與C++相比,Go語言並不包括如異常處理、繼承、泛型、斷言、虛函數等功能,但增加了 Slice 型、並發、管道、垃圾回收、接口(Interface)等特性的語言級支持。
Go語言的主要的功能在於簡單易用的並行設計Goroutine,支持異步運行而不需要擔心一個函數導致程序中斷,因此Go語言也非常地適合網絡服務。
Goroutine是類似線程的概念(但Goroutine並不是線程)。線程屬於系統層面,通常來說創建一個新的線程會消耗較多的資源且管理不易。而 Goroutine就像輕量級的線程,可以稱其為並發,一個Go程序可以運行超過數萬個 Goroutine,並且這些性能都是原生級的,隨時都能夠關閉、結束。
Julia語言:
Julia是一種用於數學計算的高級程式語言,為分布式計算和並行而設計。Julia最大的賣點就是處理速度,作為一門動態語言,它幾乎具備跟靜態語言,如C語言一般的效率。
按開發者的話說,「我們希望這門開源語言像C一樣快,像Python一樣通用,像R做統計那麼簡單,像Perl做文本處理那麼方便,像Matlab的線性代數一樣強大,還和Shell一樣可以把各種程序連接起來」。
然而使用者實在過少,支持庫也少得可憐。
Rust相比 Go 的優勢:
- Rust可以做內聯彙編,Go 不行(Rust 的 SIMD 庫也在開發中,這種事情你不會用 Go 做)
- Rust 有確定性析構,Go 沒有,只能 whole-world-stop 做 GC
- Rust 的接口(trait)可以靜態派發,做 zero-cost abstraction,Go 不行,它的 interface 只能靠反射做動態派發
- Rust 沒有運行時,可以寫作業系統(我估計至少需要幾百行彙編做 bootstrap),Go 離這種能力很遠
- Rust 有一個更豐富的類型系統,表達能力更強,允許你做更高層次的抽象,寫出泛用的庫,這個是 Go 不具備的
- Rust 有更強的語義,更容易捕獲錯誤的邏輯,編譯器直接檢查出你代碼中的不安全的部分
- Rust 的適用領域比 Go 更廣
- Rust 社區更願意改變,Go 社區喜歡堅持他們不需要泛型
- Rust 有一個活躍的開發社區,如果你發覺有東西需要做出改變,不管是文檔、編程思想、語言設計、bug fix 等等,社區歡迎你提出來一起討論,並且沒有問題的建議經常能被快速接受,不管你以後工作中會不會頻繁用到 Rust,與 Rust 一起成長總會是一段有趣的體驗;相比之下 Go 算是大公司病,人們不那麼對提出改進的建議做出積極響應。我自己也曾經為 Go 感到興奮,在那半年中我卻沒有讀過 Go 的源碼;然而在 Rust 這活躍的社區的促進下我也讀過一些源碼了,如果你對代碼的組織方式等源碼相關的問題有疑惑歡迎與我討論。
Rust 相比 Go 的劣勢:
- Go 相比 Rust 比較簡單,相對容易學習
- Rust 的語言設計看上去不如 Go 穩定,我是從 0.10 才開始用 Rust ,感受不深,不過我理解更早的用戶可以感受到語言設計的巨大變化。我自己也經歷過各種 breaking change,比如 enum 成為命名空間時,數組下標從 uint 改為 usize 時。對 1.0 之後語言的穩定性我們只能拭目以待
- Rust 是後來者,文檔不那麼完整、思維需要做出一些轉換(因為它比 Go 的內容更加豐富)。
下面站在Python的角度看看與Go、Julia、Rust的對比。
Go語言:
谷歌公司打造的「直觀、簡潔、乾淨、高效」語言,目前已經得到諸多主流技術廠商的廣泛支持。
與Swift類似,Go同樣可編譯為平台原生二進位代碼,因此在某些任務中擁有優於Python的運行速度,而且無需設定目標即可完成跨平台開發。Go語言的編譯速度也非常出色,從開發速度角度看,其更像是一種解釋型語言而非採用編譯機制。
雖然Go的歷史比Swift稍長一些,但其群體基礎仍然無法同Python相比。另外,Go的語法與錯誤處理方案對當前Python用戶來說可能不太友好。因此,其並不適合已經掌握了Python的程式設計師朋友。而Pyinstaller等工具的出現則讓Python應用的綁定工作變得非常便捷,更不用提在大多數Linux系統中,Python運行時已經被設為預置項目了。
Julia語言:
發布於2012年的Julia專門用於技術類應用,例如數據分析與線性代數計算。
Python的一類主要用例在於數學與科學應用,這主要歸功於Numpy等庫與交互IPython筆記本格式。Julia瞄準了同一用戶群體,但在核心速度上要超過Python。另外,其還提供愈發豐富的軟體包資源,不僅能夠實現數學與科學應用,同時也能像Python那樣實現面向雲環境下數據源的連接性。
Julia雖然發展速度很快,但Python的開發者社區也不會坐以待斃——圍繞Python進行的核心語言與環境開發一直未曾停歇。而且儘管Python的運行速度不及Julia,但大家仍然可以利用合適的庫來搞定合適的工作。
另外Julia的反對者也大有人在。舉例來說,Julia的數組為1索引而非0索引,這一點與幾乎所有現有語言都有所區別。
Rust語言:
這是一個同時包含語言與開發環境的統計計算項目。
R相較於Python擁有多項優勢,例如豐富的第三方軟體生態系統。另外,R在設計中考慮到了統計計算需求。雖然Python也很重視數學及統計處理,但R可謂在開發當中自上而下將二者進行了貫穿。
R還吸引到了眾多大牌廠商的支持。微軟就進行了一系列收購旨在利用R構建自己的雲數據服務。惠普方面則開發了DistributedR,能夠一次性運行在多個節點之上。隨著各相關技術成果的不斷演進,R完全有可能在統計計算領域將Python拉下馬。
不過有時候通用型語言的優勢還是值得強調。R雖然針對性更強,但也更具局限性——我們很難在R應用中實現交互性。另外,Python還能夠更好地與其它語言對接,使用RPy2等軟體包即可同時享受Python與R帶來的便利。
最後,儘管微軟確實對R給予了高度關注,但別忘了軟體巨頭同時也向Python伸出了援助之手,並計算將其運行在Azure當中。 人工智慧、大數據、雲計算和物聯網的未來發展值得重視,均為前沿產業,多智時代專注於人工智慧和大數據的入門和科普。
上面已經說了那麼多了,那位未來的前景是什麼樣呢
強烈推薦大家看看下面的視頻:
Julia語言優缺點與前景
Go語言優缺點與前景
Rust語言優缺點與前景
程式設計師如何賺第一桶金
應屆生和社招生想進大廠?零基礎跨行業?分別該怎麼學!