2014年のDartを振り返る

こんにちは、らこです。ついにDartアドベントカレンダー最終日です。参加してくださったみなさん、読んでくれたみなさん、ありがとうございました。主催しておいてなんですが全日埋まるとは思ってなくてただただ感謝です。

# 2014年はDart元年
大げさかもしれませんが私は今年がDart元年だったと思っています。（2013年はGolang元年だったと思う）2013年12月に1.0リリースしたDartは一年で1.8までアップデートされました。

## ECMA標準にDartが追加された
[Ecma approves the 1st edition of the Dart language specification](http://news.dartlang.org/2014/07/ecma-approves-1st-edition-of-dart.html)
Dartコミュニティにとって今年最も大きく、重要なイベントは、ECMA-408として仕様が標準化されたことです。こういっては何ですが、未だDartはいつGoogleの判断で消えてもおかしくない、マイナーな言語です。ですがECMAに仕様として明記されたことでDartを安心して使い続けることができるようになりました。

## Dart for Mobile
[Dart 1.5 makes it easier to develop for the mobile web](http://news.dartlang.org/2014/06/dart-15-makes-it-easier-to-develop-for.html)
Dart1.5に同梱されたDartEditorではAndroidでのデバッグができるようになりました。実際にやってみた記事は[こちら](http://qiita.com/laco0416/items/edd73c56446bdc4c45ba)です。ネイティブアプリはまだ書けませんが、DartiumをAndroidに送り込んでDartVMで実行できるというのは画期的でした。

## Google I/OでのDart
[Dart at Google I/O 2014](http://news.dartlang.org/2014/06/dart-at-google-io-2014.html)
今年のGoogle I/OでもDart関連のセッションがいくつかありました。

["Dart End-to-End: A productive developer experience for the web" セッション要約](http://qiita.com/laco0416/items/87366eb9a31a0a09b50d)

["How we built Chrome Dev Editor with the Chrome platform" セッション要約](http://qiita.com/laco0416/items/9aef51decb2a20ba6080)

["Upgrading the engine mid-flight: How Google improves its web apps without downtime" セッション要約](http://qiita.com/laco0416/items/a92dbe3132441620cdc6)

## deferred loading
[Dart 1.6 adds support for deferred loading](http://news.dartlang.org/2014/08/dart-16-adds-support-for-deferred.html)
ECMA-408に策定されたDart2.0までに実装される三本柱、「deferred loading」、「enums」、「async/await」のうち、Dart 1.6でdeferred loadingが実装されました。

deferred loadingはライブラリの遅延読み込みを可能にし、さらにdart2jsでコンパイルされた後もそれは有効です。deferred loadingについては[Dart1.6の主な変更点](http://qiita.com/laco0416/items/63faa8f03de8ab591b14)に簡単にまとめています。

## Homebrewやaptでインストール可能に
[Dart launches support for Homebrew](http://news.dartlang.org/2014/10/dart-launches-support-for-homebrew.html)
今まで公式サイトからアーカイブをDLして展開するしかなかったことでランタイム環境を整えにくかったDartですが、homebrewやaptでSDKだけをインストールできるようになり、開発者以外のアプリケーション利用者にも優しい言語になりました。

## pub globalでDartアプリのインストール、実行が簡単に
[Dart 1.7: easily share and use command-line applications built with Dart](http://news.dartlang.org/2014/10/dart-17-easily-share-and-use-command.html)
Dart 1.7から追加された`pub global`コマンドにより、pub.dartlang.orgからアプリケーションをインストールし、コマンドラインから簡単に実行できるようになりました。これでコマンドラインツールの配布のハードルが大きく下がりました。

## ついにGoogle App Engineへ
[Running Dart server applications on Google Cloud Platform](http://news.dartlang.org/2014/11/dart-on-google-cloud-platform.html)
GAEのManagedVMとしてDartが使えるようになりました。Dockerと組み合わせることでサーバーサイドアプリケーションの開発の幅が広がり、Dartの使い道がまた増えました。

## enum、async/awaitの実装
[Enums and Async primitives in Dart](http://news.dartlang.org/2014/12/enums-and-async-primitives-in-dart.html)
つい先日、Dart 1.8にてenumとasync/awaitが実装されました。まだexperimentalですが、Dart 2.0までのマイルストーンはほぼ実装し終えたと言っていいでしょう。

# 2015年のDartを夢見る
Dart Teamは基本的に実装前の新機能については情報を漏らしません。deferred loadingやenum、async/awaitはECMA-408にて策定された仕様だからわかっていただけです。2015年、Dart 1.9や2.0で何が実装されるかはわかりませんので、ここは何が実装されて欲しいか夢を見ることにします。

## dart2jsの改善
現状めちゃくちゃ遅いです。特にdart:mirrorsが絡むとコンパイル時間の単位がminになります。まだDartVMが使える環境が少ない以上、dart2jsは革命的に速くなってもらいたいところです。

## Cordova/PhoneGapの公式ポーティング
今のところ無理やりcordova.jsを使ってCordovaアプリケーション作ることはできるようですが([参考](http://jablog.ntaoo.com/2014/12/19/dart-cordova-no2/))、ぜひ公式でcordova.dartを作って欲しいところです。もしくはそれに準ずるモバイルアプリケーションフレームワークをお願いします。

## 2次元配列のリテラルがほしい
今更ですし「そこかよ」って言われそうですが、`new List<List<int>>()`なんてしたくないです。多次元配列を`[][]<int>`できるようになったら跳ねて喜びます。

みなさんが夢見る2015年のDartについても良かったらコメントで教えてください。

----
というわけで2014年のDartアドベントカレンダーはこれにて終了です。みなさんよいお年を。