巨頭們的程式語言之爭:我的語言就是比你好

banq發表於2014-12-21
今天,網際網路巨頭們也很任性,他們已經不滿足於擁有自己的巨大的資料中心、豪華巴士以及有機午餐酒吧。他們還開始推出自己的程式語言,比如Google在2009年推出Go, Facebook在去年春季引入了HacK,以及後來的D語言. 而蘋果推出了Swift語言。

在過去,程式設計世界總是被一分為二:要麼是執行快速的語言;要麼是使用簡單的現代語言。但現在,這兩個世界都撞在了一起:Google的Go語言是注重於讓併發程式設計更簡單,充分利用今天的多核處理器;蘋果的Swift將Web指令碼流行風格帶給了iPhone開發者,每個語言都有自己的標誌,Facebook的D語言也試圖將執行高效能和易於編寫兩者統一在一起。

設計程式語言其實是一種平衡,對程式設計者應該是容易的,同時又適合機器執行。(也就是說,即要討好開發人員,又要討好CPU電腦)

My Computer Language is Better than Yours一文談了這幾個語言誕生的背景和本質。因為這些大公司語言可能在未來幾年會影響每個程式設計師的職業生涯,如同IBM公司支援COBOL和SUN公司的Java一樣。

Go語言本質
Ken Thompson, Rob Pike 和 Robert Griesemer,三位Google程式設計大牛當初有推出Go語言的念頭是他們在等待C++和Java程式碼編譯,這些被廣泛使用的程式語言在谷歌這種需要大規模部署這種情形時卻表現得力不從心,每次你新增和改變一些東西時,不得不等待編譯器再次構建二進位制版本。

Pike說:構建花費了45分鐘,構建花費這麼長時間非常痛苦的。

設計一個程式語言其實是一種平衡,在易於程式設計者和適合機器之間的平衡。

Go建立者Thompson協同發明了Unix,他和Bell實驗室老將Pike曾經推出UTF-8的字元編碼標準,如今我們幾乎每天都在使用UTF-8,他們知道一點小決定會有什麼大後果,今天的每一個規則影響著未來程式設計師
的每天鍵盤生活,每一個規則也可能帶來無盡的崩潰。

例如 程式語言通常使用分號來分割語句,比如經典C語言的Hello World:

main()
{
printf(“hello world”);
}

<p class="indent">


Go建立者認為大括號是必需的,一些流行語言如Python卻把它扔在一邊,允許程式設計師使用縮排 空格或不可見字元在人類眼睛和機器之間鋪設程式碼。Go語言團隊認為這是一種深刻的錯誤,大括號意味著程式設計師能夠明確無誤地告訴計算機,什麼是一整塊程式碼。(谷歌創始人布林Sergey Brin也曾經建議使用方括號替代大括號,這樣節省程式設計師使用shift鍵來回切換,但是他沒有贏得爭論)

但是他們認為每個語句後面的分號則不是必需的,分號是為分析器服務的,不是為人類,他們要儘可能消除分號,因此,Go語言機制會在程式設計師敲完每行程式碼後面會注入分號。

Go這一創舉節省了大量勞動和眼睛疲勞,但是為了讓分號注入不再失控,程式設計師必須更加嚴謹地將程式碼包括在大括號之中,否則,分號會在錯誤的地方注射。

這種選擇不是沒有爭議,“他們竟然用冗餘的大括號毒害了語言”,一個評論者認為,空格鍵完全可以取代大括號的角色,但是Google Andrew Gerrand回覆認為:在大規模系統上每天都有狗屎事情發生,人們用一些不可見字元塞入程式碼會有不可預料的微妙Bug,這在Google的Python程式設計中已經發生不止一次了。

Go語言是專門為解決Google問題而誕生,Goole有大問題,我們需要一個語言使得我們的工作更加容易,
我們的工作是編寫伺服器端軟體。

Google有自己雲端計算超級計算機,這正是Go語言最佳化的目標,但是Google從來不會去賣一個軟體,Go是免費開源專案,Go語言被認為是基於雲基礎設施的新興語言。

Dropbox已經將其後端程式碼從Python移植到Go語言,Wordpress.com也開始使用Go語言,Wordpress他們以前是靠PHP起家的。

來自另外一篇Go vs. C中認為:
Go語言透過goroutines簡化了記憶體模型,能夠自動管理多執行緒執行,這些都優於C語言中手工編制執行緒的方式,透過channel的使用,Go使得內部程式之間通訊也變得更簡單。

但是Go和C都同樣會發生死鎖和共享資料競爭爭奪的情況,兩者都提供了相應的工具除錯這種問題,因為Go設計得更簡單,它就不可能在對執行緒的控制程度上達到C語言那種級別,如果需要這種級別的執行緒控制,那麼C還是適合的(banq注:Java和Scala同樣),對於大型專案,Go編譯得比C/C++更快,而實際執行效能稍微落後於C/C++.Go的目標就是綜合C的效能,但是使得軟體工程師更加簡單地使用它。

根據x64 Ubuntu : Intel Q6600 quad-core語言基準測試表明,Go語言快於大多數指令碼語言 PHP, Perl, Python, Ruby, Hack,慢於一些編譯型語言C++, Ada, C, 和 Fortran,也稍快於Java Haskell Scala和Erlang。當然,基準測試不代表全部,Go語言作為一個新的編譯型語言,其編譯器最佳化還是有餘地的,


Swift語言起家
以前在iOS平臺上編寫程式使用的是Objective C,當Swift語言出來後,有人感到興奮,因為他們對Objective C很失望,雖然喜歡其背後原理,但是討厭它的語法,使用它從來沒有真正享受過程式設計。

Swift建立者Chris Lattner曾經是流行開源專案LLVM的領導者。Swift瞄準的是首個工業質量系統的程式語言能夠像指令碼語言一樣充滿表現力和快樂。你可以使用Swift無需太多努力付出編寫健壯的程式碼。

但是有人指責蘋果是一個有圍牆的花園,沒有真正完全擁抱開源。

Facebook的D語言
Facebook的D語言與Google的Go語言以及蘋果的Swift語言類似,都是在強大功能和簡單易用性之間做了一種平衡。下一個大的程式語言你從來沒有聽說過一文談了以Facebook為後盾的D語言,他們認為C++確實是一個執行速度非常快的語言,但是不像Python Ruby和PHP一樣易於使用,換句話說,它不能讓開發人員開發軟體如同其執行一樣快,D試圖彌補這個缺口,提供C++一樣的效能,同時又能讓程式設計師人類方便程式設計。

實際上Facebook以前推出PHP的延伸Hack語言,Hack作為Facebook服務網頁的前端,而D語言作為Hack的後端,服務其社交網路的引擎核心部分。

D語言編譯速度也非常快,以至於實現即編輯即執行如同解釋型語言一樣。

一個語言成功取決於是否有人願意花費大資金去推動它,Java語言的成功是因為早在20世紀90年代Sun公司在其背後花了很多錢。


[該貼被banq於2014-12-21 15:35修改過]

相關文章