こんにちは。リリース予定日からかなり遅れた形となりましたが、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!)