2013年3月28日 星期四

Dart 會是 Web 的未來嗎?

原文網址:http://highscalability.com/blog/2013/3/20/dart-is-it-the-future-of-the-web.html

John McCutchan 有很長一段職場生涯是在 Linux kernel 領域, 現在以程式碼最佳化大師的身份被挖去 Google 的 Dart 團隊。 這轉折還蠻令人好奇的,直到你看到這個影片: 〈透過 Dart 將 SIMD 帶進 web 領域〉。 John 說了同行都能懂的理由,他喜歡 Dart 有三個原因: 效能、效能、還是他媽的效能。

DartGoogle 開發出來 open source 的 web 程式語言。 Dart 有兩個動機:複雜的 web application 已經變成常態(想想 GMail), 要能提供一種語言來應付這些需求。 另外,提供一種語言可以同時在 client 與 server 端運作。 以這些目標來說,Dart 是一個完整的語言、整套的開發環境、 並提供先進的 web UI framework 讓你可以用高度抽象化的方式建構 web application。

JavaScript 不夠好嗎?對大型 web application 來說, JavaScript 的本質有嚴重的缺陷而無法作某些效能上得改善, which will cause web apps to lose out to mobile apps. 先別急著抗議,Dart 是一群作 V8 的人創造出來的, 他們把 JavaScript 的經驗帶進 Dart 中了。

John 的論調是「web 不快」——儘管這跟很多主張相反。 舉例來說,比較 C 跟 web 上 2D 物理引擎的效能, web 版比 C 慢了 20 倍、Java 比 C 慢了 2 倍。 (謎之聲:Java 躺著也中槍) 由此可知 browser 速度不快。 Dart 跟新的 library 可以縮小這個差距, 讓 browser 可以開發出高效能的 application。

你可能會想知道成千上萬個 web framework 中到底要用哪一個, Dart 也許不在你的主要候選清單上。 如果是這樣,請看這個很棒的影片

你為甚麼會喜歡 Dart?下面是 John 的理由:

  • 喜歡 Dart 的結構與 static type 檢查。 Dart有一個 type 系統,神奇的是, type 系統是給工具用的,不是語言本身的特性。

  • class base 與物件導向。JavaScript 太有彈性了。

  • 關鍵字:this。跟 JavaScript 不一樣, 當你使用 this時,你知道你用的是哪一個東西。

  • 一定要有分號。

  • 效能。Dart 用比 JavaScript 嚴格的設計換取執行效率。

  • 為了 Dart 跟速度而重新撰寫的 VM。

  • Dart 中所有的 object 都有一個 static shape。 在 JavaScript 裡頭,你可以在任何時間點把 field 加進 class 中, 這讓 class 的 instance 無法最佳化。 在 Dart 裡頭不會讓你這麼作。 請記得,Dart 比 JavaScript 嚴格。

  • array 當中不會有空格。 在 JavaScript 當中,element 可以加到 array 的任何地方, 這表示他會轉換成 map、index 的值就是 key 的值。 array 會變得稀疏(sparse)、散佈在記憶體當中, 對效能來說是很糟糕的事。 Dart 不會讓你這麼作。

  • 區分可變大小與固定大小 array。 如果你事先知道一個 array 的大小,你可以把它指定成固定大小。 這樣可以讓 Dart 有更多最佳化的可能。

  • 不會再有 prototype chain 了。巨大的成功阿! 在 JavaScript 當中你會發現 method 依循著 prototype chain 來執行。 在 Dart 中,你取得 class ID 然後殂那個 class 當中得到 function。 這會非常快。

  • Dart 同時有 integer 與 double 型態。 integer 運算起來比 double 快 3~4 倍。 JavaScript 讓所有數字都變成 double 而付出不必要的代價。

這個演講的其餘部份是關於他把 SIMD 移植到 Dart 上,也很有意思。 SIMD 的意思是 Single Instruction multiple data, 這代表對 array 的資料操作會是平行處理、而不是一次只拿一小份。 在 3G 圖形、3D 物理、影像處理、信號處理、數值處理領域會變得非常快。 也就是說,browser 上頭的效能可以跟 console 一樣。

這篇文章只是簡短的評論 Dart,其餘 SIMD 的部份請看影片吧。

Dart 有未來嗎?

Dart 要贏,就要提供速度方面的改善, 讓其他 application 處於明顯的競爭劣勢, 而不僅止於跟大量影像相關的 application。 如此一來 JavaScript 的 interpreter 需要迎頭趕上、 不然開發人員就會被迫轉移陣營。 But this is not an area where Google can get customer wins just by being Google or by being marginally better.(譯註:翻譯不能)。 又小又怪的 JavaScript 可愛多了, JavaScript 的生態圈也很可愛、而且十分強大。 Google 在其他領域參與 JavaScript 的生態圈可能會在這個點上頭跟自己打對台。


譯註:最後的「Related Articles」沒有翻。 另外,翻這篇絕對不是這篇文章寫的很好(事實上,脈絡感很差)、或是我喜歡 Dart(GWT 萬歲!)。

沒有留言:

張貼留言