Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Dart1.7リリースノート

More than 5 years have passed since last update.

先日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もしくはhttphttpsでなくてはなりません。 末尾に/がついていなくても自動で付与されます。また、spawnされて起動する新しいIsolateでの外部パッケージのインポート("package:foo/bar.dart"のような) は、packageRoot.resolve("foo/bar.dart")として解決されます。省略した場合はspawn元と同じものが使われます。

次にpausedですが、これがtrueである場合は起動されるIsolateはポーズされた状態で起動されます。つまり、 isolate.pause(isolate.pauseCapability)が呼ばれたような状態で起動されます。この状態で起動できることにより、Isolateの実行前にセットアップなどの処理が行えるのが利点です。改めて実行させるにはisolate.resume(isolate.pauseCapability)を呼び出せばいいです。

ちなみにpackageRootpausedはまだすべてのプラットフォームで実装されているわけではないので、実行環境によりエラーとなる可能性があります。

pubに関する変更

実行可能なパッケージをPATHから実行できるようにする変更

pub globalについてはこちらを御覧ください。また、この機能に関するブログ記事があります。

1.6までは、pub global activate hogehogeされたパッケージを実行するにはpub global run hogehogeと呼びださなければなりませんでしたが、次の方法により直接hogehogeと呼び出せるようになります。

  1. pubのキャッシュにPATHを通す
    デフォルトでは~/.pub-cache/binです。
  2. 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として目が離せないですね

lacolaco
I play Angular and pray for Angular. No Breaking Changes No Life.
https://lacolaco.net
classi
学校の先生・生徒・保護者向けのB2B2Cの学習支援Webサービス「Classi(クラッシー)」 を開発・運営している会社です。
https://classi.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away