木曜日
中田育男先生の「コンパイラ」の8章「仮想マシンと通訳系」を読みながら、EtoLispの仮想マシンを設計する。
Lispの世界そのものであるランタイムがあり、ランタイムの中にはいくつかのパッケージがあり、パッケージの中にはシンボルが入っている。これまでの理解によるとLispのシンボルは単なる数字ではなくて、それ自身が関数や値に紐付けられている。持っているといってよい。
値はトマトやキュウリで、関数は包丁や鍋のようなものである。それらがシンボルにぶら下がってパッケージの中にごちゃごちゃ入っている。Lispの世界でやりたいことは、トマトやキュウリと包丁や鍋を使ってカレーライスを作るような作業である。この世界では関数を関数に放り込むこともできる。包丁にモータを取り付けてクッキングブレンダーをつくるようなものだろう。
仮想マシンは、トマトやキュウリなどの材料からカレーを作るまでの手順を定義して、自動的に実行する工場のようなものなのだ。色々異論はあるだろうけど、それくらいの粒度の処理系が自分には扱いやすいと思うので、それを目指して作ろうと思う。
レゴブロックを崩してまた作り直す子供のような気分。
腹が減った。