看板 Translate-CS 關於我們 聯絡資訊
原文網址: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 有未來嗎? ------------- 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」沒有翻) -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.4.190
yauhh:感謝大大無私的分享 03/28 21:35
saxontai:web 版筆 C 慢了 20 倍 → web 版比 C 慢了 20 倍 03/28 22:18
感謝指正 ※ 編輯: PsMonkey 來自: 114.25.4.190 (03/28 22:25)