ニュース
「Dart」言語のマクロ機能、開発を断念
課題に次ぐ課題で、限られた時間での解決に見込みが立たず
2025年1月30日 13:11
「Dart 3.4」で試験導入されたマクロ機能は、残念ながらキャンセルされたとのこと。日本時間1月30日、公式「Medium」で公開された記事で明らかになった。
「Dart」は、Googleが主導で開発を進めているオープンソースのプログラミング言語。クロスプラットフォーム対応のUIツールキット「Flutter」の開発言語として根強い支持を集めている。
マクロ機能は「Dart」言語に静的メタプログラミングの機能を追加するために数年前から実装が進められていた。たとえばWebと連携するアプリではJSONのシリアライズ処理が不可欠だが、「Dart」はパフォーマンス上の理由からランタイムリフレクションをサポートしていないため、定型のエンコードとデコードを手動で行うか、外部のコード生成ソリューションに頼らざるを得なかった。
そこで、開発チームはマクロシステムの実装を志したが、静的言語の堅牢さ・パフォーマンスと動的言語の生産性を両立するため、多くの言語が採用する構文ベースのマクロシステムではなく、セマンティックイントロスペクションと呼ばれる野心的なアプローチを採用した。つまり、単にJSONのシリアライズ処理をスマートに記述するだけでなく、デバッグ実行したアプリケーションの状態を保持しながらコードの変更を反映させることのできる「ステートフルホットリロード」などの開発手法とも両立させようと試みたわけだ。
しかし、このセマンティックイントロスペクションはコンパイル時に大きなコストをもたらすことが判明したとのこと。また、ステートフルホットリロードの整合性を保つのも難しくなったという。現在の実装では既存の静的解析やコード補完、(ホットリロードの前提である)インクリメンタルコンパイルなどで後退を余儀なくされており、解決の見込みが立たないとのことで、残念ながら開発を中止する決断が下された。
これまでマクロシステムの実装につぎ込まれていたリソースは、データハンドリング、シリアライズ、デシリアライズなどの改善や、ビルド時間とコード生成の全体的なエクスペリエンスの改良に注がれるとのこと。開発チームはマクロ機能を試し、フィードバックやプルリクエストを送ってくれたユーザーに感謝するとしている。