こんにちは。リリース予定日からかなり遅れた形となりましたが、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 getとpub upgaradeコマンドにおいて実行ファイルのプリコンパイルや依存関係のトランスフォームを無効にする--no-precompileフラグが追加されました。 -
pub publishがgitレポジトリを公開した場合でもシンボリックリンクを解決するようになりました。
Dart Dev Compiler
-
dartdevcが実験的にSDKに追加されました。 - これは実装の検証・そのフィードバックを助けるものです。
dartdevcはまだ実験段階です。
さらに詳しいことはdev_compilerのレポジトリページを見るのが良いかと思います。まだUSAGEが更新されていませんが、簡単につかってみることはできます。
標準ライブラリの変更点
dart:convert
-
BASE64URL定数が追加されました。
BASE64URL constant - dart:convert library - Dart API
(BASE64URLのexampleは間違っていますので、こちらのcommitで変更されたものを見ると良いと思います。)
-
ChunkedConverterクラスが追加されました。また、ConverterクラスのstartChunkedConversionがdeprecatedになりました。
ChunkedConverter class - dart:convert library - Dart API
startChunkedConversion method - Converter class - dart:convert library - Dart API
dart:html
今回のリリースでは最近のChromeの変更に伴ういくつかの破壊的変更があります。
- Chromeの
ShadowRootはgetElementByIdやgetElementsByClassName,getElementsByTagNameをサポートしなくなります。
elem.shadowRoot.getElementsByClassName('clazz')
のようなコードは、
elem.shadowRoot.querySelectorAll('.clazz')
のように記述するようになりました。
-
KeyEventクラスとEventクラスからclipboardDataプロパティが取り除かれました。copy,cut,pasteなどのイベントで使われているこれらはClipboardEventクラスに移動しました。
ClipboardEvent class - dart:html library - Dart API -
layerプロパティがKeyEventクラスとUIEventクラスから取り除かれ、MouseEventクラスに移動しました。
MouseEvent class - dart:html library - Dart API -
pageプロパティがUIEventクラスから取り除かれました。MouseEventクラスとTouchクラスには存在しています。
Touch class - dart:html library - Dart API
他にも、ChromeのAPIをv39からv45に引き上げたことで、 dart:html,dart:indexed_db,dart:svg,dart:web_audio,dart:web_glに多くの変更が行われています。破壊的な変更のほとんどはJavaScriptにコンパイルするときや最新のChrome上で実行した際に例外が発生していたのを修正するものです。
dart:io
-
SecurityContext.alpnSupportedが追加されました。これはそのプラットフォームがALPNをサポートしていればtrue、そうでなければfalseを返します。
alpnSupported property - SecurityContext class - dart:io library - Dart API
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!)