從數據結構角度,Golang和Swift對比,有何優缺點?

Go和Swift都在靜態,編譯語言的基礎上吸收了很多腳本語言的特色。

以我不成熟的理解:

Go用Interface取代了傳統的類,弱化了指針和繼承。

Swift將Class和Struct以某種程度統一,保留指針,引入了靈活的Generic。

Go和Swift的差別是否會在不同的應用領域影響到使用的便利度,能否結合具體應用介紹一下他們的優缺點?


Go 的設計思路是這樣的:

通過全面禁止一切可能耍花槍的高級語言結構(如范型,甚至如實現繼承)

通過全面託管一切需要程序員動腦的任務(如內存管理、協程調度)

讓程序員專註於用一種最平鋪直敘的語言堆積業務邏輯。

——這個思路基本是與近期的所有其它語言背道而馳的。


前段時間試了試,整體上 Swift 更像 Rust,但遠沒有 Rust 那麼複雜,它綜合了 Java,Python,甚至 Javascript...很多語言的特點,要學的花,上手可能要比 Go 語言慢一點,但可能後期編寫代碼會更簡單,更有趣。

因為它支持泛型和語法糖,編寫的代碼量要比 Go 語言少,但比動態語言還是要多一點。

它的基本類型比 Go 語言更加豐富,比如支持 enum,tuple,value(值類型),字典...(一直很奇怪 Go 語言為什麼不支持枚舉,那個又省內存又高效,編譯器也更好查錯,寫代碼的人的邏輯也更整潔)

它的數據結構是那種可持久化的數據結構(一個複雜又深厚的東西,畢竟作者是那個 LLVM 的作者,Rust 也是用的這個 LLVM)。


從數據結構角度,Golang和Swift對比,哪個更節省你的時間和生命?


go1.4的更新,好像說android的java代理可以可以直接嵌入go代碼,也就是說,以後可以用go些android應用了,這樣子,golang和swift還真可以類比了。。。


swift 是多範式編程語言。可結構化編程struct enum,可面向對象class,可面向協議protocol,可函數式 high-order,pure function。

從數據結構上來看,swift提倡多用struct enum少用class。抽象上提倡protocol-oriented(能用在class上,也能在struct上,比java介面更強大),最重要的,不要忘了function也是非常重要的數據結構,利用high-order可以寫出復用性更好的代碼,利用pure function寫出更健壯的代碼。

go不熟悉,看過兩本書,沒有打動我。


兩門語言的目標完全不同。

Swift是蘋果自己的平台的專用語言,雖然是開源的,但是還是蘋果說了算的,封閉的,主要面向客戶端開發的語言。

Go是谷歌的開發語言,在谷歌內部比較邊緣化,用團隊不多,但是在中國尤其受到歡迎。

因為Go語言適合開發高吞吐高並發的伺服器程序。尤其是遊戲和Web伺服器。

在中國,最多的開發者是從事這方面的工作的。

由於兩者的設計目標的區別,兩者在數據結構上也根本不同。Go傾向於和Web開發無關的數據結構都是次要的。有很多項目嘗試過用Go來寫 數據處理和機器學習的程序,但是性能慢的嚇人。例如GoLearn項目。這點也是Go團隊不看重,本來Go設計出來就不是用來寫演算法的。如果真的要寫機器學習的演算法,最合適的是OpenCL/CUDA。


推薦閱讀:

未來是屬於objc的還是visual studio的?
給函數包一層皮性能會下降嗎?
自己寫的COFF文件格式和編譯器生成的.obj文件一樣嗎?
寫編譯器需要把彙編語言學到什麼程度就夠用了?入門到進階有什麼好書值得讀?
「Monokai」這個詞是什麼意思?

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