SParser-2.1 released
http://fhuman.esys.tsukuba.ac.jp/~nozom/SParser-2.1.zip
変更点は、
例によってドキュメントも何もない(コメントもほとんどない)ので、読みたい人は気合いで調べてほしい。
末尾呼び出しの最適化を含む、コンパイルの仕組みを考えていたがどうにも良いアイデアが浮かばない。今の実装だと、1000回の繰り返しがあると結果的に1000個のパラメータが違うだけの継続を作ることになるので、インタプリタ形式ならともかくコンパイラ方式ではこれはまずい(インタプリタ形式の場合、生成するそばから消費するので、call/ccを使わなければアクティブな継続は関数呼び出しの深さに比例する)。まともにやるなら、まず全体を継続渡し形式(CPS; Continuation Passing Style)に変換してやるんだろうけど、こんなのJavaで書きたくない。それこそSchemeで書きたいので、じゃあコンパイラはSchemeレベルで実装するか? でもコンパイル処理はSchemeの世界だけでは完結できないので、最終的には絶対にJavaで書かないといけない部分はあるだろうし、そうなるとインタフェースをどこで取るか悩みどころ。