Node.js陣營出現投奔Go的'叛將'

banq發表於2014-07-08
一位Node.js guru大牛 TJ Holowaychuk最近發表了再會Node.js,他曾經是Empress, Mocha, Jade, Stylus Koa等參與者,TJ在這篇宣言中首先強調自己是一個古老C語言的粉絲,Go語言自然是其最愛,他指出Node.js存在幾個硬傷:錯誤處理Error Handler 回撥地獄和健壯性。這篇文章如同一顆炸彈,在充滿活力的Node和JavaScript的社群引起了轟動。炸開鍋了。

下面文章是有關討論:

TJ leaving node.js

Why I'm (partially) leaving Node for Bash

Why I’m staying with Node

The March Towards Go

反對者認為:T.J.指出的Node.js問題非常類似英語,雖然有一堆錯誤語法,但是我們還是能夠彼此能聽懂。而Go語言如同夏威夷語,簡單,體積小,效果好,不易出錯,但是很少知道(banq注:經過這麼一吵架,大概知道人很多了)。而Java類似德語。

Node.js在幾個下面有優勢:
1.Web應用,使用Node能夠在前端和後端之間共享程式碼。
2.正確工具適合相應的工作,如果需要併發支援的複雜智慧演算法,那麼Go等語言更合適,但是也不能僅僅靠一段迴圈程式碼的小型基準測試就在Node和Go之間進行抉擇恐怕不合適,產品的ROI投資回報率和開發效率 以及易招聘恐怕也是應該考慮。

另外一位反對者認為:可用性和缺乏強大的錯誤處理是Node主要問題,Error-handling是Go的一個強項,Node需要你考慮每個錯誤然後決定怎麼去做。但是這兩個問題是可以避免的。

可以使用streamline.js這樣的流庫來支援流Stream開發,這反而能使用老結構的exception handling,這種方式比Go語言更好,因為你不必每次呼叫以後檢查錯誤程式碼。

不要使用雙重回撥callbacks; 這樣就不會陷入回撥地獄,丟失回撥的跟蹤,所有報錯都要顯示其上下文。這樣除錯程式碼能夠有可理解的stacktrace。

使用基於回撥而不是基於事件的stream庫,能夠讓我們程式碼更加簡單,健壯和易於理解,另外使用generators, fibers, preprocessors等可以用順序程式設計的方式編制出非同步執行的程式碼。

如果說,三年前因為JavaScript和獨特非同步I / O,Node.js成為最酷的平臺,但是在今天在有其他可替代方案的情況下,人們將要求更多,特別是在可用性和魯棒性。

關於Go語言:Why Go Is Not Good,該博文作者竟然將Go語言和Rust Haskell兩種語言比較,得出Go語言不夠好的結論?

Go語言開發的Docker: http://www.jdon.com/46474

相關文章