汎言語的健全構文マクロ機構を用いた言語処理系構築手法の研究
これが採択された課題の名称です.汎言語的はぼくの造語です.世の中にはさまざまなプログラミング言語がありますが,ぼくらは個々のプログラミング言語に特化した研究ではなく,できるだけ多くのプログラミング言語を網羅的に扱う研究を目指しています.
マクロというのは,プログラミング言語の字面の書き方をもっとリッチにする仕掛けです.マクロの仕掛けにはいくつかの種類があります.
- 字句マクロ (Lexical macro system)
- 構文マクロ (Syntactic macro system)
- 健全構文マクロ (Hygienic macro system)
字句マクロは歴史的に古く,わかりやすいのですが,仕掛けが素朴なために,十分に注意して使わないと落とし穴にはまることがしばしばあります.C言語のマクロの説明を読むと,冗談のような間違いの例が列挙されているのですが,この穴にはまって這い出した苦い経験を持つ人はいくらでもいますよね?
下の方の仕掛けは字句マクロの問題点を改善するために,プログラマの理解に即した仕掛けを提供しています.仕掛けがより洗練しているのですが,仕掛けが巧妙なために個々のプログラミング言語ごとにその仕掛けを作り直さなくてはいけないのですが,その仕組みが複雑なためにその仕掛けを実装することがそもそも困難になってしまいました.また,マクロの仕掛けがプログラミング言語の構文と直結しているために,異なるプログラミング言語で異なる仕掛けが用意されるようになっていることも大きな問題だと思います.
第一期のマクロの研究汎言語的メタプログラミング基盤としての健全な構文マクロ機構の研究では,健全構文マクロという仕掛けについて研究してきました.健全構文マクロシステムはまだ一部のプログラミング言語にしか取り入れられておらず,その実装方法については個別のプログラミング言語ごとに(おおざっぱに言えば)がんばるしかなかったわけです.
第一期の研究のテーマはがんばらないで健全構文マクロを作れないのかということでした.L1という言語に健全構文マクロ機能(M1)を付加した(L1+M1)という言語を作ったとしましょう.これを見たL2という言語のプログラマがL2にも健全構文マクロを作りたいと思ってもM1を参考にしながらM2を作るのはかなり困難でした.そこで,ぼくらが考えたのはM1からM2を作れないのかということでした.このために二つの言語L1とL2の相互変換器を使って,まずマクロ付きのL2のプログラムを(L1+M1)に変換し,そこで健全構文マクロの仕掛けを動かしたものをL2に戻すという仕掛けです.
荒井くん,甫水さん,森くんという優秀な学生さんたちのおかげでいくつかの技術的な困難を克服し,非常にコンパクトな実装で健全構文マクロシステムが構築できることを示せました.
今年度から始まる新しい研究では,これまでに提案した仕掛けをさらに抽象化し,健全構文マクロシステムの実装技術をさらに洗練させるとともに応用の範囲をプログラミング言語から,各種仕様記述言語に拡大することしています.
共同研究者は渡部卓雄さん@東工大計算工学専攻と佐々木晃さん@法政大学情報科学部です.