プログラミング言語が再び盛んに研究の対象になっている。今回は言語の意味論に注目が集まっている。
プログラムは意味を持つ構造物です。構造があるのでプログラムは変換ができます。意味があるのでプログラム同士を比較して変換の有効性を判断できます。意味にはプログラムの外延的な振る舞いと内包的な振る舞いが含まれます。
プログラム変換は新しい研究の成果でもある。既に商用の製品も発表されている。
プログラム変換はひとつのプログラムをもうひとつのプログラムに変えます。このプログラム変換という言葉はプログラム変換を実装したアルゴリズムの形式的記述のことも指します。変換されるプログラムをソース言語、変換結果をターゲット言語と言います。
Adrian Thurston氏は Colm (COmputer Language Manipulation)という言語を初めて発表した。 氏ははクイーンズ大学の博士課程で開発した。氏曰く、
変換言語は形式言語に基づいた型システムを持っています。クラスやデータ構造を定義するのではなく、文法を定義するのです。パーサーは文法から自動で生成されます。パーサーの目的はふたつです。入力された言語を解析することと分析を行うプログラムの構造パターンを解析します。文法に基づいた構文解析は重要です。入力と構造パターンが同じ型からツリーへと解析されることを保証するからです。これによって比較が可能になります。
Colmはこの解析の手法を改善する。
Colmの解析エンジンは汎用的で、解析中に利用できる任意のグローバルデータ構造が構築できます。他の汎用的な方法では、グローバルデータ構造を構築するのは細心の注意が必要です。構文解析固有の並列性があるからです。したがって、この方法は使われず、問題は解析後の解析フォレストの曖昧さの排除に持ち越されます。
Colmを使えば、バックトラック法が利用できるなら、最初に入力した段階で正しい解析木を生成できます。グローバルデータの並列更新可否の判断をしなくて済みます。また、間違っている解析木を排除するためだけにあり得る解析木を生成する必要もありません。
言語ワークベンチの開発とColmのような強力な変換技術のおかげでメタプログラミング(または、メタモデル指向プログラミング)はずいぶん進歩した。あなたは既に利用しているだろうか。どうお考えだろうか。