DartはGoogleが開発したプログラミング言語で、同じくGoogle主導で開発されたGo言語と同じ立ち位置にあります。
2011年にGoogleより発表され、V8エンジンの中核エンジニアであるLars Bak氏、Kasper Lund氏によって開発されました。
当初はJavaScriptに代わるWeb開発用言語として登場しましたが、後にFlutterフレームワーク専用言語となり、クライアント向けマルチプラットフォーム(モバイル、Web、デスクトップ)を強みとしています。
Google社内のYouTube、GCP、基盤インフラといった多くのコア業務で多用されており、クライアント開発と独立した大規模なコミュニティエコシステムを形成しています。
最大の特長は、単一のコードからAndroid、iOS、macOS、Linux、Windowsなど複数プラットフォーム向けアプリケーションを生成できる点です。
全体の定位
Dartはクライアント向けに最適化されたマルチプラットフォーム開発言語で、高効率なマルチ端末開発体験を実現することを目標とし、柔軟なランタイムによってアプリフレームワークを支えます。本言語はFlutterの基盤レイヤーであり、コードフォーマット、静的解析、単体テストなどの開発ツール機能を標準で備え、Web、モバイル端末、デスクトップなど複数環境にコンパイル・デプロイ可能です。
技術特徴
開発時にホットリロードに対応しています。
リリース段階では、各プラットフォーム向け高品質なアプリケーションを出力できます。
型安全性
- 静的強型(サウンドタイピング):型の一致を強制する一方、型推論により型注釈を省略可能;
dynamicによる動的型に対応し、ランタイム検証と組み合わせることで柔軟な動的コーディングシナリオに対応できます。
完全なNull安全性(sound null safety)
変数はデフォルトでnullを許容せず、明示的な宣言のみnullを保持可能;静的解析により実行時のNullポインタ例外を事前に遮断し、非Null変数は実行中に常に非Nullが保証されます。
標準ライブラリ、非同期呼び出し、Null許容/非Null型、アロー関数、ジェネレータ、ストリーム、getterなどの文法機能を標準搭載
充実したDart標準ライブラリ
- dart:core:すべてのDartプログラムに必須、基本組み込み型、コレクションと汎用中核機能を提供
- dart:collection:拡張コレクション、キュー、連結リスト、ハッシュマップ、二分木など高度コンテナを収録
- dart:convert:データエンコード/デコードツール、JSON、UTF-8など形式相互変換に対応
- dart:math:数学定数、演算関数、乱数生成ツール
- dart:async:非同期プログラミング基盤、Future、Streamなど中核非同期クラスを提供
- dart:typed_data:高効率固定長バイナリ配列(8ビット符号なし整数など)、SIMD数値型
- dart:io:Web以外の環境専用、ファイル、Socket、HTTPなどIO操作機能を提供
- dart:ffi:C言語風外部関数インターフェース、Cコードとの相互呼び出しを実現
- dart:isolate:並列処理分離スレッド、通常のスレッドと異なりメモリを共有せずメッセージのみで通信
- dart:js_interop / package:web:Web環境専用、HTML要素操作、ブラウザDOM、JavaScript相互呼び出しに対応
標準組み込みライブラリ以外に、公式が多数の補助パッケージを保守しています:characters、intl、http、crypto、markdown。 コミュニティのサードパーティ開発者はXML、Windowsシステム連携、SQLite、データ圧縮など機能に対応する数千の拡張パッケージを公開しています。
Dart実行対応プラットフォーム
Dartは複数のコンパイル技術によりマルチ端末実行を実現しています:
1. ネイティブプラットフォーム(モバイル / デスクトップ)
JIT(即時コンパイル)搭載Dart仮想マシン、AOT(事前コンパイル)コンパイラの2種類のコンパイルシステムを内蔵し、機械語を生成可能です。
2. Webプラットフォーム
開発用・リリース用の2系統のコンパイル方式を提供し、DartコードをJavaScriptまたはWebAssemblyに変換できます。
FlutterはDartプラットフォームを基盤とした代表的なマルチ端末UIツールキットで、完全な開発ツールと画面ライブラリが付属し、iOS、Android、macOS、Windows、Linux、Webアプリケーションの開発に利用できます。
Dartネイティブコンパイル(JIT + AOT)
- 開発フェーズ(JIT):仮想マシンの増分コンパイルによりホットリロードに対応、リアルタイムパフォーマンス監視、完全なデバッグツールを備え、反復開発効率が極めて高い;
- リリース配布(AOT):ARM /x64ネイティブ機械語にコンパイルされ、アプリ起動速度が安定かつ高速;
- ランタイムに成熟したメモリ管理機構を内蔵:世代別ガベージコレクション、高速オブジェクト割り当てを実装すると同時に、Dartの完全な型安全ルールを厳格に適用します。
Dart Webコンパイル(JS / WasmGC)
DartコードをJavaScriptに変換しChrome V8エンジンなどブラウザ上で実行するほか、WebAssemblyにコンパイルすることも可能です:
- 開発用コンパイルモード:増分JSコンパイラ、ホットリロード対応で高速なデバッグ・反復開発が可能;
- 本番JSコンパイル:最適化圧縮、デッドコード削除を実施し、ファイルサイズが小さく実行効率の高いJSを出力;
- WasmGC本番コンパイル:高性能WebAssembly GCコードにコンパイルされ、実行速度が大幅に向上します。