[翻譯] Dart 會是 web的未來嗎?

作者: PsMonkey (痞子軍團團長)   2013-03-28 16:06:19
原文網址:http://highscalability.com/blog/2013/3/20/
dart-is-it-the-future-of-the-web.html
譯文網址:http://blog.dontcareabout.us/2013/03/dart-web.html
BBS 版以 markdown 格式撰寫
______________________________________________________________________
[John McCutchan] 有很長一段職場生涯是在 Linux kernel 領域,
現在以程式碼最佳化大師的身份被挖去 Google 的 Dart 團隊。
這轉折還蠻令人好奇的,直到你看到這個影片:
〈[透過 Dart 將 SIMD 帶進 web 領域]〉。
John 說了同行都能懂的理由,他喜歡 Dart 有三個原因:
效能、效能、還是效能。
[John McCutchan]: http://www.linkedin.com/pub/john-mccutchan/3/b32/755
[透過 Dart 將 SIMD 帶進 web 領域]:
http://www.youtube.com/watch?v=CKh7UOELpPo
[Dart] 是 [Google 開發出來] open source 的 web 程式語言。
Dart 有兩個動機:複雜的 web application 已經變成常態(想想 GMail),
要能提供一種語言來應付這些需求。
另外,提供一種語言可以同時在 client 與 server 端運作。
以這些目標來說,Dart 是一個完整的語言、整套的開發環境、
並提供先進的 web UI framework 讓你可以用高度抽象化的方式建構 web application。
[Dart]: http://en.wikipedia.org/wiki/Dart_(programming_language)
[Google 開發出來]: https://code.google.com/p/dart/
JavaScript 不夠好嗎?對大型 web application 來說,
JavaScript 的本質有嚴重的缺陷而無法作某些效能上得改善,
which will cause web apps to lose out to mobile apps.
先別急著抗議,Dart 是一群[作 V8] 的人創造出來的,
他們把 JavaScript 的經驗帶進 Dart 中了。
[作 V8]: http://javascriptjabber.com/
008-jsj-v8-and-dart-with-lars-bak-and-kaspar-lund/
John 的論調是「web 不快」——儘管這跟很多主張相反。
舉例來說,比較 C 跟 web 上 2D 物理引擎的效能,
web 版比 C 慢了 20 倍、Java 比 C 慢了 2 倍。
(謎之聲:Java 躺著也中槍)
由此可知 browser 速度不快。
Dart 跟新的 library 可以縮小這個差距,
讓 browser 可以開發出高效能的 application。
你可能會想知道成千上萬個 web framework 中到底要用哪一個,
Dart 也許不在你的主要候選清單上。
如果是這樣,請看這個很棒的[影片][透過 Dart 將 SIMD 帶進 web 領域]。
你為甚麼會喜歡 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 有未來嗎?
作者: yauhh (小y寶貝)   2013-03-28 21:35:00
感謝大大無私的分享
作者: saxontai (黑暗,點綴孤零零的星)   2013-03-28 22:18:00
web 版筆 C 慢了 20 倍 → web 版比 C 慢了 20 倍

Links booklink

Contact Us: admin [ a t ] ucptt.com