Googleのプログラミング言語Dartの最新バージョンの2.6では、dart2native
の追加によってネイティブサポートとアヘッド・オブ・タイム(AOT)コンパイルが拡張されて、LinuxやWindows、MacOS用のコマンドラインプログラムの開発が可能になった。
重要なのは、dart2native
が自己完結型のバイナリを生成することである。つまり、実行時にはDart SDKランタイムを必要としない。dart2native
のもうひとつの重要な特徴は、Dartが対象とする他のプラットフォーム上で利用可能な、Dartコアライブラリ全体のサポートだ。さらにdart2native
は、ネイティブプラットで使用可能なC言語互換システム関数へのインターフェースとしてDart 2.5で導入された、C言語相互運用層のdart:ffi
とも互換性を持っている。
AOTコンパイルはこれまでもFlutter経由でサポートされていたが、その対象はiOSとAndroidに限られていた。dart2native
によって、モバイルからWebまで、デスクトップから組み込みデバイスまで、幅広いプラットフォームをターゲットにできるようになる。
DartとFlutterのプログラムマネージャであるMichael Thomsen氏によると、dart2native
の理想的なシナリオはサーバレスコンピューティングである。サーバレスコンピューティングでは、リモート関数の実行開始時のレイテンシの最小化が大きな鍵になるからだ。
サービスのコードを事前(アヘッド・オブ・タイム)にネイティブコードにコンパイルすることによって、このレイテンシを回避し、即座に起動することが可能になります。
ネイティブへの移行によって起動時間はミリ秒の単位になり、ジャスト・イン・タイム(JIT)コンパイルに対して大きく改善される。dart2native
を使用するもうひとつのメリットは、プログラムフットプリントの削減である。
Dart開発者のPaul Mundt氏は先頃、dart2nativeを使用した自身の経験をドキュメントにしました。それによると、氏のDockerイメージのサイズは、JITコンパイルコードを使用した場合の220MBから、ネイティブコードを使うことで20MBまでダウンしたということです!
dart2native
以外にも、Dart 2.6には新たな言語機能が含まれている。そのひとつであるExtension Methodは、クラスが最初に生成されたコンテキストとは異なるスコープで、新たにメソッドを追加してクラスを拡張可能にするものだ。
dart2native
を含むDart 2.6は、https://dart.dev/get-dart
から入手可能である。ただし、Flutterによるアップデートでは、dart2native
のフルサポートはインストールされない。