http://languagegame.org/tmp/Repl.html
現在の状況。
- 独自 lisp 言語 (cola) で Tamarin 用 lisp コンパイラを書く。
- Tamarin 用 lisp コンパイラで Tamarin 用 lisp コンパイラを書く。<- いまここ
- さらに Tamarin 用 lisp コンパイラで Tamarin 用 lisp コンパイラを書く(ブートストラップ)。
もう言語としては大体出来ている。さらにもう一周コンパイラを作ってブートストラップの環を完結させるのはもう自己満足の世界になってくるのだが、動作確認のためにやってみたいと思う。
この週やっていた Flash Plusgin 向けの REPL の実装は技術的には面白い事は無くて、ただじっくりと ActionScript の入門書を読んで動的なバイトコード生成を実現させる作業だった。Flash Plugin には直接バイトコードを読む機能は無いので、一旦内部的に swf ファイルを作って flash.display.Loader で読むという事になる。swf を作るのは面倒なので http://eval.hurlant.com/ のコードを流用した。だから実はいま完全 lisp では無く、ちょっとだけ ActionScript が混ざっている。トリッキーなのは動的読み込みが非同期な所。eval の結果をイベントハンドラで受け取らなくてはならない。
swf ファイルの大きさは 57KB で収まった。アセンブラとコンパイラを含む自己記述可能が言語の大きさとしては割といいんじゃないかな。しかし、全体の行数はついに一万行を超えてしまった。
このままじゃ全く面白く無いので、早く画像を使ったデモが作れるようになりたいな。