Dart が今後どのようなアップデートをしていくか気になります!
そんな要望にお答えするのが本記事です。
本記事ではDartの今後のアップデート予定( Dart 3 )に関して、
The road to Dart 3 という公式のブログ情報を要約しお伝えします。
Dartの今後についてワクワクすること間違いなしです!
ぜひ読んでみてください!
完全なsound null safety 言語へ
次のリリース、Dart 3 で完全なsound null safety な言語への”旅”を完了します。
この”旅”の最後のステップで、
sound null safety 無しのアプリの実行のサポートの削除を含む、
いくつかのDart 言語とSDKのアーティファクトを削除します。
これによりDartは学びやすくなり、
Dart SDKの新しい機能のサポートのための進化を
より素晴らしい速度で可能にします。
なぜsound null safety である必要があるのか
多くの現代的なプログラミング言語はnull safety に対応しています。
(void safety と呼ばれているものもあります。)
Dart言語では、デフォルトで作られる変数はnullでなくし、
明示的に宣言されたときのみ、変数がnullであることを許容します。
一歩先に行くために、Dartでは既存の言語に対しsound null safety を導入しています。
sound システムは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 は 多くの新機能を含みます。
他のプログラミング言語との相互運用性の向上や、新たな言語機能です。
新機能の中から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月頃に準備できる予定です。
あなたのアプリで準備すべきことは以下です。
- 未解決の null safetyマイグレーションを完了すること
- deprecated なAPI を使っていないか確認すること
- dart fix を実行すること
Dart 3 ではpattern のような複数の新たなパワフルな機能を含んでいます。
2023年春のDart 3 beta版リリースですべての機能を試すことができる予定です。
まとめ
本記事ではDartの今後のアップデート予定( Dart 3 )に関して、
The road to Dart 3 という公式のブログ情報を要約しお伝えしました。
いかがだったでしょうか?
Pattern について様々な機能が追加されそうで、
とても楽しみな情報でしたね!
来年春のベータ版リリース、半ばのstable 版リリースを楽しみに待ちましょう!
本記事があなたのアプリ開発の一助となれば幸いです。
編集後記(2022/12/14)
Dart 3 についての最新情報のまとめでした。
Dartの最新情報は以下のGitHubでまとめて管理がされています。
特にProjects は現在進行中のissue 等がまとめられており、
とても興味深いです。
自分は新機能、と聞くだけでワクワクするので、
今回の記事は書いていて楽しくて仕方がありませんでした。
このワクワクが本記事で伝わったら幸いです。
今後も最新情報を追いかけてお伝えしますので、
週刊Flutter大学のwatch をよろしくお願い致します。
週刊Flutter大学では、Flutterに関する技術記事、Flutter大学についての紹介記事を投稿していきます。
記事の更新情報はFlutter大学Twitterにて告知します。
ぜひぜひフォローをお願いいたします。