というわけで
leafもそういう方向性で進めたいわけですが、
OOとはどう折り合いをつけるのかな……
前にOCamlでコンパイラ書いたときも
gensymとintern以外破壊的操作を行わない縛りで作業したんだけども、
ASTや functional intermediate representation に
ちょっとした情報つけるためだけに
新しく木を作り直したりする必要があって、
これってどうなのと思ったりもした。
今考えると、単にモジュールのパラメタライズがへたくそだった
だけではないか、という気も
しなくもないですが。
あとクロージャのエスケープ解析に
どっかの論文からパクってきたAbstract Virtual Machine
(レジスタが集合になってるような仮想機械)を
論文通りに関数型で書いたんだけども、
それも我ながら愚かだと思った。
それもこれもOCamlのOO機能が
さわらない方がよさそうな感じに見えたからですが。
もうちょっとOCamlとHaskell勉強したほうがいいかな。
Scalaの方がいい?