Dart 1.16 リリースノート

  • 2
    いいね
  • 0
    コメント

こんにちは。リリース予定日からかなり遅れた形となりましたが、Dart1.16がリリースされました。

Dart News & Updates: Dart 1.16: Faster tools, updated HTML APIs

簡単に変更点をまとめていきたいと思います。CHANGELOGはこちら

TL;DR

  • dev_compilerがSDKに実験的に追加された
  • pubのパフォーマンスが改善された
  • HTML APIがDartiumのChromeのバージョンに合わせてアップデートされた。

1.16変更点

ツール変更点

pub

  • pub serveがキャッシュヘッダに対応しました。これは大きなファイルを複数回取得する際のパフォーマンスの改善となるはずです。
  • pub getpub upgaradeコマンドにおいて実行ファイルのプリコンパイルや依存関係のトランスフォームを無効にする--no-precompileフラグが追加されました。
  • pub publishがgitレポジトリを公開した場合でもシンボリックリンクを解決するようになりました。

Dart Dev Compiler

  • dartdevcが実験的にSDKに追加されました。
  • これは実装の検証・そのフィードバックを助けるものです。dartdevcはまだ実験段階です。

さらに詳しいことはdev_compilerのレポジトリページを見るのが良いかと思います。まだUSAGEが更新されていませんが、簡単につかってみることはできます。

標準ライブラリの変更点

dart:convert

(BASE64URLのexampleは間違っていますので、こちらのcommitで変更されたものを見ると良いと思います。)

dart:html

今回のリリースでは最近のChromeの変更に伴ういくつかの破壊的変更があります。

  • ChromeのShadowRootgetElementByIdgetElementsByClassName, getElementsByTagNameをサポートしなくなります。
elem.shadowRoot.getElementsByClassName('clazz')

のようなコードは、

elem.shadowRoot.querySelectorAll('.clazz')

のように記述するようになりました。

他にも、ChromeのAPIをv39からv45に引き上げたことで、 dart:html,dart:indexed_db,dart:svg,dart:web_audio,dart:web_glに多くの変更が行われています。破壊的な変更のほとんどはJavaScriptにコンパイルするときや最新のChrome上で実行した際に例外が発生していたのを修正するものです。

dart:io

JavaScript interop

パフォーマンス改善のため、JS interopに破壊的変更が追加されています。

@JSアノテーションを使用する場合はライブラリ宣言にも@JSをつけることが必要となります。partをつかって読み込んだDartファイルで@JSアノテーションを使用している場合も同じです。

このため、相互運用したいJSライブラリごとにライブラリを作る必要があります。アプリケーションの一部で@JSアノテーションを使うことはできなくなり、JS interopを利用したライブラリとJSライブラリが1:1で対応するようになりました。

CHANGELOGのこちらもあわせて御覧ください。
chartjs.dartの変更対応commitも参考になるかもしれません。

Analyzer

for in文が静的解析されるようになりました。

// Not Iterable.
for (var i in 1234) { ... }

// String cannot be assigned to int.
for (int n in <String>["a", "b"]) { ... }

このような警告が出るようになります。

DartPadなどで実際に試してみるのがわかりやすいと思います。サンプルはこちら

最後に

ちょっと前のニュースになりますが、Dart Developer Summit 2016も発表されました。2016年10月26~27日に、ドイツのミュンヘンで行われるようです。公式サイトはこちら

dev_compilerに関しては、近いうちにUSAGEが更新されるはずです。新たな発表が大きいものであったらまたまとめたいと思います。

(翻訳を @laco0416 さんに改善していただきました。Thanks!)