空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

金曜日

ソチ五輪開幕、NBCで開会式の再放送を見る。

全世界が注目する中での国旗掲揚と国家の演奏。ロシアにとってはさぞ誇らしい瞬間であろうと思う。なじみの薄い共産圏だからというのもあり、続く開会式の演出も面白い。テロの脅威や工事の遅れなど、問題は沢山あるが、そういうのも全部ひっくるめて、人類が成しうる最大級のイベントはつまるところこういう表現に落ち着くのか、みたいな不思議な納得感を得る。

木曜日

中田育男先生の「コンパイラ」の8章「仮想マシンと通訳系」を読みながら、EtoLispの仮想マシンを設計する。

Lispの世界そのものであるランタイムがあり、ランタイムの中にはいくつかのパッケージがあり、パッケージの中にはシンボルが入っている。これまでの理解によるとLispのシンボルは単なる数字ではなくて、それ自身が関数や値に紐付けられている。持っているといってよい。

値はトマトやキュウリで、関数は包丁や鍋のようなものである。それらがシンボルにぶら下がってパッケージの中にごちゃごちゃ入っている。Lispの世界でやりたいことは、トマトやキュウリと包丁や鍋を使ってカレーライスを作るような作業である。この世界では関数を関数に放り込むこともできる。包丁にモータを取り付けてクッキングブレンダーをつくるようなものだろう。

仮想マシンは、トマトやキュウリなどの材料からカレーを作るまでの手順を定義して、自動的に実行する工場のようなものなのだ。色々異論はあるだろうけど、それくらいの粒度の処理系が自分には扱いやすいと思うので、それを目指して作ろうと思う。

レゴブロックを崩してまた作り直す子供のような気分。

腹が減った。

水曜日

日中、奥さんが歯医者に行っている間、会社でM氏を一時的にあずかる。

昼はコストコのフードコート。夜は煮豚の丼とうどん。

子供を寝かしつけてから自分が眠くなるまでのささやかな時間を使ってetolispを書き直し始める。本日はパーサ部分を書き直す。数年前の行き当たりばったりなコードを全て捨て去り、有限オートマトンとして設計図を紙の上に書き下し、コードに落とし込む中で状態遷移を整理しなおして、高速かつシンプルな実装になった。

以前のetolispは素朴に構文木をじかに評価する仕組みで、構文木と値の区別が無かった。今回はちゃんと構文解析から変換系を通って仮想マシンバイトコードを生成するところを作ってみたいので、そのへんも合わせてずっとシンプルにした。