mini-Python実装中

演習のmini-Pythonを実装しているところ。

mini-Python演習には、とりあえず動く処理系をつくるフェイズと、発展課題に取り組むフェイズがあるのだけれど、発展課題のほうではVMによるインタプリタを実装してみたいなーと思っている。

そこで、言語処理系のVMについてちょくちょく情報を集めているのだけれど、なかなか有用な情報がみつからない。書籍をいくつかあたってみたけど、コンパイラの本では"VMの実装"について扱っていないか、扱っていても簡単に触れておわりになっているものしかない。

VMを実装する上では、おそらく次の2点がクリアできれば後は本質的に難しいことはないように思う。

  • VMの設計(レジスタ、スタックフレーム、命令セットなどなど)
  • 抽象構文木からVMの命令列への変換

抽象構文木からVMの命令列への変換は、おそらく今手元にあるModern compiler implementation in Cの中間言語への変換が理解できれば、肝はおなじだろうから可能だと思う。

問題はVMの設計。どのようにな設計をすればよいのか、今のところ見当がつかない。VMの設計指針とか、そういう情報があるととても嬉しいんだけど、コンパイラの本を読んでいる限りはどうもそういう情報は少なそう。どこを探せばよいもんだろうか。風の噂でレジスタマシンは実装が難しくて、スタックマシンはわりと簡単というのは聞いたことがあるような気がする。

とりあえずは既存のVMといったらgaucheかな、と思ってgauchevm.cあたりを読んだりしている。mini-pythonの機能からすると、gaucheVMだとオーバースペック(継続とかクロージャとか)だと思われるので、gaucheVMから必要なさそうな機能をとりのぞいたようなものを作れば、とりあえずそれらしくなるんじゃないだろうかと思っているところ。