領域特化言語

松田 一孝(情報理工学系研究科コンピュータ科学専攻 助教)

領域特化言語(Domain Specific Language)は,特定の問題領域に対するプログラムを書くために設計されたプログラム言語である。

プログラムを書くことは難しく,しばしば不具合(バグ)を埋めこんでしまいがちである。しかし,現在ではソフトウェアはPCや携帯電話はいうにおよばず,医療機器や交通システム・機関,工場などのいたるところで使われており,その不具合はたいへんな問題を引き起しかねない。実際,過去にソフトウェアの不具合により,人命が失われたり,数億ドルもの損害が出たりした例がある。

では,どうやったら不具合の少ないプログラムを作ることができるだろうか?ひとつの解答は,プログラムを書かないことである。冗談ではなく,通常プログラムを作るときは本筋部分以外に,解決したい問題とは関係ないさまざまなコードも書く必要がある。メモリ管理,効率的なデータ構造やアルゴリズム…本当にそれらは,個々のプログラマが考え書かなければならないのだろうか?

ひとつの解決策は領域特化言語の利用である。適切に設計された領域特化言語を利用すれば,メモリ管理などの低レベルな部分や,その問題を解くための効率的なデータ構造やアルゴリズムについて,プログラマが気にする必要がなくなる。それらは,領域特化言語の処理系の責任である。たとえば,データベース問合せのためのSQLは領域特化言語の例として挙げられるだろう。

領域特化言語の研究の面白さは表現力と効率/保証のバランスの追究にある。言語の表現力を大きくしさまざまなプログラムを記述できるようにすると,その言語や領域の性質に特化した最適化や不具合のなさの保証などが難しくなる。いっぽうで表現力が小さすぎても領域特化言語としての意味がない。領域特化言語の表現力を高めるためには,その領域の性質を利用した最適化や,不具合のなさの保証のための手法や理論の研究が不可欠である。

最近でもさまざまな領域特化言語が研究されており,その対象とする問題領域は,構文解析,データベース問い合わせ,整形出力,テストケース生成など多岐にわたる。また,最近のプログラミング言語においては,領域特化言語を「埋め込み(Embedded)領域特化言語」として実装できる場合がある。これは領域特化言語をホスト言語のライブラリとして実装するもので,ユーザには利便性というメリットが,領域特化言語の実装者には,最適化や型システムなどのホスト言語の機能が利用できるというメリットがある。

本研究科において,筆者は現在,保存/読込処理,アンドゥ処理,構文解析と整形出力など,相互変換記述のための領域特化言語およびそれを支える最適化などの技術の研究に取り組んでいる。