Dart 3 最新情報! 〜 The road to Dart 3 の要約 〜

Dart が今後どのようなアップデートをしていくか気になります!

そんな要望にお答えするのが本記事です。

本記事ではDartの今後のアップデート予定( Dart 3 )に関して、
The road to Dart 3 という公式のブログ情報を要約しお伝えします。

Dartの今後についてワクワクすること間違いなしです!
ぜひ読んでみてください!

この記事はあくまで要約となっています。

細かいニュアンスが知りたい方は、ぜひ以下の元記事(英語)をご確認ください。

The road to Dart 3: A fully sound, null safe language
Preparing for the next major release, where Dart only supports sound null safety

完全なsound null safety 言語へ

次のリリース、Dart 3 で完全なsound null safety な言語への”旅”を完了します。
この”旅”の最後のステップで、
sound null safety 無しのアプリの実行のサポートの削除を含む、
いくつかのDart 言語とSDKのアーティファクトを削除します。
これによりDartは学びやすくなり、
Dart SDKの新しい機能のサポートのための進化を
より素晴らしい速度で可能にします。

null safety とは何かについて詳細は以下の記事をご確認ください。

【Flutter初心者向け】Dartの!とか?って何?(Null Safety)

なぜsound null safety である必要があるのか

多くの現代的なプログラミング言語はnull safety に対応しています。
(void safety と呼ばれているものもあります。)
Dart言語では、デフォルトで作られる変数はnullでなくし、
明示的に宣言されたときのみ、変数がnullであることを許容します。

一歩先に行くために、Dartでは既存の言語に対しsound null safety を導入しています。
sound システムはnullでない変数は、決してnullな値を含みません。

null safety : nullでないと宣言した変数にnullな値が含まれることがある(例: TypeScript)

sound null safety : nullでないと宣言した変数にnullな値が含まれることはない

Dart に対して、sound null safety の導入はマイグレーションが難しさはあるものの、
nullでないと宣言された変数に対しnullでないことを信頼でき、
コンパイラとランタイムの最適化の実装を行うことができました。

Dart 3: すべてのDartコードがsound null safetyに

現存のDart パッケージやアプリがsound null safety に対応するのに
インパクトがあります。
マイグレーションを手助けするために、
Dartでは3つの方法であなたのアプリのコードを実行するサポートをしています。

  • null safety でない
  • 部分的にnull safetyである
  • 完全にsound null safety である

どれでも実行可能です。
dependencies を含む100%のコードがマイグレートされた場合に
完全なsound null safety が実現します。
このためにはDart の開発者に既存のコードのマイグレートのための時間が必要です。
しかしながら、複数のモードでの実行のサポートを保つことは、
オーバーヘッドや複雑さを含んでしまいます。

1つ目に、Dartの開発者は上記3つのモードがあることを念頭に置かなければならず、
読む時に言語のバージョンを見てチェックを行わなければなりません。

2つ目に、3つのモードのサポートはDart SDK の進化を遅くします。

Dart 3 では、sound null safety が唯一のサポートされたモードとなります。
Pubspec ファイルに212 より低い下限がSDKの成約に含まれたコードは
Dart 3 以降では実行が止まります。

遠隔での測定から、
85%近くのflutter run の実行がsound null safety で行われていると認識しています。
もしあなたのアプリやパッケージが残りの15%なら、
2023年半ばを想定しているDart3のリリース前にマイグレートをしてください。

マイグレーションの参考動画

言語やAPIの破壊的な変更

null safety の変更に加えて、
Dart 言語やコアライブラリAPIのアーティファクトの削除をするため、
いくつかの変更をする予定です。
ディスコン状態のAPIの削除や、
デフォルトの引数に対するシンタックスの削除
ティアオフの明示的な要求
を含みます。

これらの変更はnull safety を使うことより影響は低いと想定しているとのことですが、
Dart 3 のalpa がリリースされた時にこれらは快適変更をテストすることが可能です。

Dart 3 の新機能

Dart 3 は 多くの新機能を含みます。
他のプログラミング言語との相互運用性の向上や、新たな言語機能です。

Dart 3 の新機能に関しては2023年1月25日に開催予定のFlutter Forward で、
より多くの情報が発表されるとのことです。

新機能の中から1つ、patternを紹介します。
Pattern はDart言語をより高価にし、
より構造化されたデータに対するサポートが追加され、
代数的データ型(algebraic data types) でより関数的なスタイルが可能となります。

次のコードは関数でmultiple return value を使用する例です。
値のペアを破壊し、個々の値に変える能力があります。

// record を返す関数 -- このケースでは2つのdouble型の組を返します。
(double x, double y) getLocation(String name) {
  if (name == 'Aarhus') {
    return (56.1629, 10.2039);
  } else {
    ...
  }
}

// 返ってきたrecordを個々の値に分解しています。
void main(List<String> arguments) {
  final (lat, long) = getLocation('Aarhus');
  print('Current location: $lat, $long');
}

// クラスのヒエラルキー、pattern matchingを定義することができます。
sealed class Shape {
  double calculateArea();
}

class Square implements Shape {
  final double length;
  Square(this.length);
  double calculateArea() => length * length;
}

class Circle implements Shape {
  final double radius;
  ...
}

double calculateArea(Shape shape) => switch (shape) {
  Square(length: var l) => l * l,
  Circle(radius: var r) => math.pi * r * r
};

コードは元記事の引用です。
コメントのみ日本語に訳しています。

Dart 3 より先の話

現在の作業の一部はDart 3の後に完了する予定です。

Dart コードのWebAssembly (Wasm) へのコンパイルのサポートがその1つです。
Wasm はFlutter Web アプリをブラウザ上で完全なネイティブコードとして実行可能にします。

2つめはmacros (マクロ)です。
これはStatic metaprogramming を可能にします。

これらの機能はDart 3 より後に実装予定となります。

Dart 3 への道のり

まずすべきなのはsound null safety へのマイグレートです。

次に、Dart 3は一連のマイルストーンで展開されます。
以下の日程を中心に展開予定です。

  • 2023年 1月~ 2月頃 : Dart 3 のalpha 版をリリース予定です。
    初期のDart 3 互換性テストを有効にすることに重点を置いています。
    Dart 3 alpha での静的解析を通過するアプリ、パッケージが
    Dart 3 stable 版をサポートすることが目標です。
  • 2023年 1月~ 2月頃 : Dart 3 の beta版をリリース予定です。
    このリリースで絵はDart 3 での新機能をプレビューできます。
  • 2023年半ば:Dart 3 のstable 版をリリース予定です。
    sound null safety が唯一のサポートモードとなります。

The road to Dart 3 のまとめ

Dart 3 のリリースは 2023年半ば頃の予定です。
このリリースではいくつかの破壊的変更や
sound null safety でないコードの実行のディスコンが行われます。
Dart 3での互換テストができるDart 3 alpha 版は
2023年1月 ~ 2月頃に準備できる予定です。

あなたのアプリで準備すべきことは以下です。

Dart 3 ではpattern のような複数の新たなパワフルな機能を含んでいます。
2023年春のDart 3 beta版リリースですべての機能を試すことができる予定です。

まとめ

本記事ではDartの今後のアップデート予定( Dart 3 )に関して、
The road to Dart 3 という公式のブログ情報を要約しお伝えしました。

いかがだったでしょうか?

Pattern について様々な機能が追加されそうで、
とても楽しみな情報でしたね!

来年春のベータ版リリース、半ばのstable 版リリースを楽しみに待ちましょう!

本記事があなたのアプリ開発の一助となれば幸いです。

Flutterを一緒に学んでみませんか?
Flutter エンジニアに特化した学習コミュニティ、Flutter大学への入会は、
以下の画像リンクから。



編集後記(2022/12/14)

Dart 3 についての最新情報のまとめでした。

Dartの最新情報は以下のGitHubでまとめて管理がされています。

GitHub - dart-lang/language: Design of the Dart language
Design of the Dart language. Contribute to dart-lang/language development by creating an account on GitHub.

特にProjects は現在進行中のissue 等がまとめられており、
とても興味深いです。

自分は新機能、と聞くだけでワクワクするので、
今回の記事は書いていて楽しくて仕方がありませんでした。

このワクワクが本記事で伝わったら幸いです。

今後も最新情報を追いかけてお伝えしますので、
週刊Flutter大学のwatch をよろしくお願い致します。

週刊Flutter大学では、Flutterに関する技術記事、Flutter大学についての紹介記事を投稿していきます。
記事の更新情報はFlutter大学Twitterにて告知します。
ぜひぜひフォローをお願いいたします。

タイトルとURLをコピーしました