Hatena::ブログ(Diary)

Islands in the byte stream

2013-12-15

Dart 1.0 を触ってみた。

Dart 1.0 がリリースされて、ECMAでの標準化作業が始まったようです。

Chromium Blog: Ecma forms TC52 for Dart Standardization

DartはJavaScriptと比較してずっと使いやすいので、いずれ標準化されたDartが様々なブラウザで実行できるようになれば*1JavaScriptに付随する問題の多くが解消され altJS も使われなくなるかもしれませんね。

Dartのメリットとしては、JSのしがらみにとらわれないぶん奇妙なイディオムに支配されることがないことや、それゆえ言語仕様やListやMapなどのコレクション型を含む標準ライブラリが独自に設計されており高機能ということ。デメリットとしては、JSの常識が通じない分学習コストが高いことと実行時のオーバーヘッドが高い*2ことなどでしょうか。

というわけで、以前作ったDartプログラムを 1.0 に対応させてみました。

移植してみた感想を適当に。

  • 言語仕様自体は2年前とくらべて互換性のない変更はあまりない
  • dart:core, dart:htmlなどの標準ライブラリAPIは大きく変わっており、JSからだいぶ乖離してきている
    • たとえば、Map<K, V>のkeys/valuesのイテレーションは以前は map.getKeys() でリストを得ていたが、いまは map.keysIterator を得るようになった
      • これにともないkeys/valuesをfor-inでまわしているときにもとのmapを変更すると CuncurrentModificationError が投げられるように。Javaっぽい!
    • setTimeout(callback, duration)new Timer(duration, callback) になるなど設計思想的にも大きな変化がみられる
  • 全体的にドキュメントは豊富で、特に Dart Synonymsをみればだいたいなんとかなる

*1:10年後くらい?

*2:JSと同じセマンティクスの部分のオーバーヘッドはほぼないのですが、そうでないところはかなりオーバーヘッドがあります。たとえばMapはDart内で再実装されており、高機能ですが非常に遅いです。

フラミンゴフラミンゴ 2013/12/16 12:18 DOM仕様にprototypeという文字が入ったり、WebAPIにおいて高機能なプロトタイプベース言語が前提となりつつあるのに、クラスベース、しかも全く新しいものを登場させるだけの価値がわかりません。
ES6、ES7とJSを改良していくので十分という考えはないのでしょうか?コレクション型だって導入されます。
柔軟なものに厳しいオプションを付けていくほうが、その逆より遥かに簡単なはずです。
勿論altJSとしてのDartはいいのですが、多くのデメリットと引き換えに、たかだか2倍程度のパフォーマンスを得るためにVMを載せる意味がはたしてあるのでしょうか?

gfxgfx 2013/12/18 23:06 JSをとりまくエコシステムの成長はもう限界だと思います。その証左がCoffeeScript, TypeScript, Dart, JSXなどのaltJSの乱立です。JSにいくら機能を追加しても、後方互換性を崩すような変化は入れられませんし、"use strict"のような形でオプショナルでつけたとしてもそれを前提にはできません。

Dartの言語仕様は十分にシンプルかつ強力なので、altJSを一掃できるだけの成長をとげるかもしれません。ぼくがDartに期待するのはその点です。

perlcodesampleperlcodesample 2013/12/20 15:38  javascriptでは、大規模な階層を持つGUIアプリを作るのは、しんどいと思います。たとえばJavaのSwingみたいなのを、javascriptで設計したくないと思います。

 たぶんgoogleはブラウザ上で、ネイティブアプリに劣らないような、アプリを動かしたいんだと思います。

通りすがり通りすがり 2014/08/01 15:34 Web上での開発というのは基本的にDOMAPIを叩いていくだけであって、
GUI等の開発がしんどいのは言語の問題ではなくDOMAPIやCSSが貧弱だからです。
例えDartが思う存分使えたとしてもそこは変わりません。

トラックバック - http://d.hatena.ne.jp/gfx/20131215/1387112052