先日Dart1.7のリリースノートが発表されました。言語自体への目立った新機能の追加はないですが、apt-get対応やhomebrew対応、"pub global"の正式実装など周辺環境の改善が多く、新たにDartを始めやすい環境が整いつつあると感じました。以下は個別の解説です。
dart:asyncに関する変更
ZoneにerrorCallbackメソッドを追加
FutureやStreamの中でthrowされたエラーがエラーハンドルされる前に割り込みの処理を入れられるようになりました。
AsyncError errorCallback(Object error, StackTrace stackTrace)
主な使い道はZoneを継承した独自のZoneに置けるエラー処理だと思います。errorCallback
の返り値がnull
である場合は、そのまま本来のエラーハンドラに同じ引数が渡されます。逆にnull
でないAsyncError
オブジェクトを返した場合は、その新しいオブジェクトが元のエラーの代わりにエラーハンドラに渡されます。
新メソッドの追加ですので、名前衝突していない限り既存のコードに影響はないです
dart:ioに関する変更
HttpClientのclose処理に関する変更
詳細はこちらに別記されています。これまでHttpClientはアイドルタイムアウト時間が設定されている場合、HttpClient#close
を呼びださなくても自動でシャットダウンしていましたが、1.7からはclose
の呼び出しが必須となりました。
アイドルタイムアウトのみを設定していたコードでは修正の必要があります。
HttpServerにautoCompressプロパティを追加
これまでは常に有効となっていたコンテンツの圧縮の有効・無効を設定できるようになりました。これからはデフォルトで圧縮しない設定になります。Dart1.7にアップデートしてHttpServerの挙動が変わったと思ったらここをtrue
にしてみるといいかもしれません。
dart:isolateに関する変更
Isolate.spawnUriメソッドにpausedとpackageRootの2つのオプショナル引数を追加
これは地味に大きな変更かもしれません。
packageRootパラメータはfile
もしくはhttp
、https
でなくてはなりません。 末尾に/
がついていなくても自動で付与されます。また、spawnされて起動する新しいIsolateでの外部パッケージのインポート("package:foo/bar.dart"のような) は、packageRoot.resolve("foo/bar.dart")
として解決されます。省略した場合はspawn元と同じものが使われます。
次にpaused
ですが、これがtrue
である場合は起動されるIsolateはポーズされた状態で起動されます。つまり、 isolate.pause(isolate.pauseCapability)
が呼ばれたような状態で起動されます。この状態で起動できることにより、Isolateの実行前にセットアップなどの処理が行えるのが利点です。改めて実行させるにはisolate.resume(isolate.pauseCapability)
を呼び出せばいいです。
ちなみにpackageRoot
とpaused
はまだすべてのプラットフォームで実装されているわけではないので、実行環境によりエラーとなる可能性があります。
pubに関する変更
実行可能なパッケージをPATHから実行できるようにする変更
pub global
についてはこちらを御覧ください。また、この機能に関するブログ記事があります。
1.6までは、pub global activate hogehoge
されたパッケージを実行するにはpub global run hogehoge
と呼びださなければなりませんでしたが、次の方法により直接hogehoge
と呼び出せるようになります。
- pubのキャッシュにPATHを通す
デフォルトでは~/.pub-cache/bin
です。 - activateする
pub global activate hogehoge
とすることで実行可能にできます。
CLIとしてのDartの使い勝手があがることで今後の普及に一役買いそうです。
dart2jsに関する変更
同一ページでの複数のdeferred loadingが有効になった
1つのページに複数のDartアプリがあり、それぞれでdeferred loadingが正しく機能するようになりました(何かバグがあったんだろうか・・・)
ソフトウェア配布に関する変更
Debianリポジトリが追加された
Debian系OSにおいてapt-getでDartSDK(DartiumやDartEditorはまだ)がインストールできるようになりました。が、最初にリポジトリの追加のためのセットアップ作業が必要なのでこちらを参考にしてください。
MacユーザーのためにHomebrewをサポートした
以前からhomebrewでDartがインストールできるようになってましたが、Dart開発チームでも使うようになったみたいで、公式にサポートするようにしたみたいです。
以上Dart1.7の主な変更点です。今回は控えめなアップデートですが、この後には待望の async/awaitが待っているのでDartisansとして目が離せないですね