本論文は三部から成り、第一部(第2章、第3章、第4章)は自己反映言語の実現手法、第二部(第5章)は部分評価器の作成、第三部(第6章、第7章)は部分評価の自己反映言語への応用について述べられている。 「自己反映言語」とは、そのプログラム言語の実装、あるいはセマンティクスを言語内部から参照、変更できるような言語のことである。その高い柔軟性、拡張性から自己反映言語は言語拡張の道具としてばかりでなく、実行時におけるプログラムの挙動の制御など幅広い応用が期待されている。従来の自己反映的でない言語は普通、より低レベルな言語で実装されているため、言語のセマンティクスを変えるのは容易ではなかった。自己反映言語は、そのような変更を高レベルの言語機能を使って直接、可能とするものである。 しかし、このような高い柔軟性、拡張性をもつ言語を設計するのは容易ではない。そのため、従来の自己反映言語は、機能を制限しているか、あるいは極度に非効率的なものがほとんどであった。本論文では、その一見複雑な自己反映言語の構造に対し、わかりやすい見方を与えるとともに、その一般的な実現法、およびコンパイル法を提示する。 本論文は大きく三部にわけることができる。第一部では、次に示すような良い性質を持つ自己反映言語の一般的な実現手法を述べる。 1.ユーザは、その言語のセマンティクスを規定するインタプリタを、同一言語内から参照できるとともに、自由に変更することができる。 2.「セマンティクスを規定する言語のセマンティクスの変更」といった多段に渡る自己反映機能が許されている。 3.ユーザプログラムは、インタプリタが変更されない限りは十分、効率的に実行される。 この実現手法を用いて、本論文では実際にBlackという言語を実装する。この言語は、関数型言語Schemeに自己反映機能を付け加えたものであり、Scheme言語を離れることなく、その言語セマンティクスを自由に変更できるような言語である。 ここで実装されたBlackのインタプリタは、ユーザによるインタプリタの変更が小規模のうちは効率的に動くが、変更が大規模になってくると効率が低下してしまう、という欠点を持つ。この欠点を補うために、本論文では部分評価を使ってのプログラムのコンパイルを検討する。本論文の第二部は、コンパイラとして使用しうる部分評価器の作成がテーマである。具体的には、副作用を含む関数型言語を正しく処理できる部分評価器を設計する。副作用解析を取り入れることで、書き変わりうるデータ構造を特定するとともに、履歴を保持することで実行順序を保ちつつコードの複製、消滅の問題を解決する。ここで作成する部分評価器は、副作用を持つ命令を正しく扱えるばかりでなく、従来は部分評価し切らなかった式も部分評価時に実行できるなど、強力なものとなっている。この枠組を拡張して作成した我々の部分評価器はSchemeのほとんど全ての命令を正しく処理することが可能である。 第三部では、部分評価の技法をBlackに適用して、実際に種々のプログラムのコンパイルを行なう。部分評価器がBlackのインタプリタに組み込まれ、現在のインタプリタをプログラムで特化することにより、現在の言語セマンティクスのもとでのコンパイルが行なわれる。また、コンパイルの結果、得られたインタプリタをさらに部分評価することで、ユーザによって変更された言語セマンティクスのもとでのコンパイルを実現する。これは、自己反映言語のコンパイル手法のひとつを提示しているとともに、部分評価の応用という意味でも重要である。 なお、本論文第一部および第二部は、米澤明憲氏、松岡聡氏、増原英彦氏との共同研究であるが、論文提出者が主体となって分析及び検証を行ったもので、論文提出者の寄与が十分であると判断する。 したがって、博士(理学)を授与できると認める。 |