[翻译] 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