Dart 1.0 を触ってみた。

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

Chromium Blog: Ecma forms TC52 for Dart Standardization

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

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

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

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

  • 言語仕様自体は2年前とくらべて互換性のない変更はあまりない
  • dart:core, dart:htmlなどの標準ライブラリAPIは大きく変わっており、JSからだいぶ乖離してきている
    • たとえば、Mapの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内で再実装されており、高機能ですが非常に遅いです。