Dart 2

エコシステムガイド

@ntaoo

Dart 2への進化
Angular
Flutter

サーバーサイド

パッケージ集

Dart 2 🤗🤔

  • ゴールを変更

  • Web用言語から汎用プログラミング言語へ

  • Dart 2ではクライアントサイドにフォーカスすると名言🤔

  • VMでの実行からJavaScript(Web)とネイティブコード(iOS, Android)へのAoTコンパイルを重視へ

Dart 2 🤗🤔

主にクライアントサイドの環境の制約に対応するため、AoTコンパイル重視に方針変更

 

  • 換装可能、オプション扱いという含みをもたせた型システムから、型安全性を重視した新しい型システム(Strong mode)に統一
  • Dart 1のChecked modeは廃止😥
  • 良くも悪くも普通(?)の型システムに
  • 実質的に静的型付き言語のノリ

Dart 2 🤗🤔

主にクライアントサイドの環境の制約に対応するため、AoTコンパイル重視に方針変更

 

  • 動的な一部の機能も廃止、または非サポート
    • @proxy annotationの廃止
    • dart:mirrorのクライアントサイドでの非サポート
  • 代わりに新しいbuild system(dart-lang/build)を導入
  • コンパイル時コードジェネレーション

Dart 2

Strong mode

 

  • 型安全性を重視した新しい型システム
  • 型推論 (final aValue = 1; // int型と推論)
  • Subtypeによるoverrideを禁止する制約
    • covariant keywordでこの制約を解除可能
      • Dart 1のように実行時の柔軟性とエラーのリスク
  • 詳しくは以下

Dart 2

new, constキーワードがオプション扱いに

  • FlutterでのWidgetの読み書きがしやすく
  • 両キーワードは推論される

 

Dart 1

Dart 2

Dart 2

new, constキーワードがオプション扱いに

 

  • 将来、var, finalもオプション扱いになるかも

    • i = 42; // var i = 42; in current spec.

    • i := 42; // final i = 42; in current spec.

      • 個人的には逆の記法にしてほしい
      • varの方の記法を面倒にしてほしい

Dart 2

移行ガイド、移行ツールが公開中
https://webdev.dartlang.org/dart-2

Dart 2

mixin キーワードの導入等、さらに知りたい方へ

 

以下を読みましょう😄

https://github.com/dart-lang/sdk/tree/master/docs/language/informal

https://github.com/dart-lang/sdk/tree/master/docs/newsletter

 

Dart 2

 

  • リフレクションからコードジェネレーションへ
  • 新しいビルドシステム

 

解説には時間が不足

Dart 2 まとめ

  • 言語自体は尖った所はあまりなくなった
  • 学習が非常に容易
  • Dart Teamが提供する豊富なライブラリとStatic analyzerによる高い生産性
  • 多様な動作環境という強み
    • Webアプリ(JavaScript) :  dartdevc, dart2js
    • iOS, Android, macOS, Linux等のネイティブアプリ : Flutter
    • サーバーサイド: DartVM
  • 異なるコンパイルターゲットでも動作するuniversalなコードを書いて共有が、とても容易
    • 普通にできる。

始めよう

  • Dartのインストール : brew install dart --devel
  • エディタ(IDE)
    • WebStorm(有料)またはIntelij IDEA community edition(無料)が良い
    • Flutterでの開発はAndroid Studioで
    • VS Code, Atom, Emacs, Vimでもプラグインが提供されている

まだStable版ではないけど

 

あまり恐れる必要なし

バグの多さではなく破壊的変更が入る可能性があるかどうかという意味

  • DartSDK 2.0.0-dev.42.0
  • Angular 5 alpha+8
  • Flutter beta

個人的な予想としては、夏から秋くらいでstable宣言されるのでは

エコシステム

  • Angular

    • Dart版 Angular
    • TypeScript版とは戦略的な立ち位置が異なるため、最近はゆっくりと両者のSpecが離れてきた
    • https://webdev-dartlang-org-dev.firebaseapp.com/angular/
    • AngularとFlutterでApplication Modelを共有できる強み
    • PWA対応はTS版が先行。Dart版はまだベータ版の風情
    • Angular TypeSript版との比較を詳細に解説できるが時間が足りないので省略

エコシステム

  • Flutter

    • iOS, Android用クロスプラットフォーム開発環境
    • 絶賛の声多数
    • デスクトップ向けも公式に提供予定
      • macOS, Linux, Fuchsia, (Windowsにも来る??)
    • AngularとFlutterでApplication Modelを共有できる強み
    • 解説は時間の都合上省略
    • https://flutter.io/

エコシステム

サーバーサイド

AQUEDUCT

https://aqueduct.io/

定番パッケージ

自分が毎回採用しているパッケージ

https://pub.dartlang.org/

注目パッケージ

注目パッケージ

 

build, source_span, string_scanner, source_genなどのbuild, code generation関係のpackageで遊んでみるのも面白いです。

 

appengine, gcloudのサポートは停滞しているのが悲しい😢

 

Thanks!