みなさん、おはようございます。
ISLisp処理系KISSですが、最近けっこう集中的に開発をしていて、色々な進展がありました。
・GC可能な全Lispオブジェクト構造体に、以前はポインタ2つ分のメンバを使っていたんですが、いまはGC用ポインタ1つだけにしました。GCで使うフラグはこのポインタ内の1ビットを使うようにしました。
・Lispオブジェクトを指し示すポインタ内部にいわゆるFixnumとFixcharを詰め込みました。これにより、普通の整数や文字の生成ではヒープからメモリ確保しなくてよくなりました。
・GNU MP数学ライブラリを使うことで、いわゆるBignumが使えるようになりました。
・rlwrapというGNU Readlineライブラリのラッパーコマンドを教えていただいたおかげで、コマンドラインでカッコの入力がやりやすくなりました。対応するカッコがブリンクするんですね。(./kis)
・C言語のinline関数を使い始めました。リスト操作系のほとんどすべての関数をインライン関数としてヘッダファイルkiss.hに移しました。
・C言語でのLisp用関数の実装で、使い捨てのLispオブジェクトは、できるだけconsしないように、つまり、スタックにLispオブジェクトを確保するようにし始めました。
・hash-tableを実装して、Symbol管理に使い始めました。
今後の作業予定は…
・テストコードをもっと書く。
・オブジェクトシステム(ILOS)のデータ構造を良くする。クラス専用のC構造体の用意とか。ただスロットの継承関係の表現で依然としてスロットはリストで表現するのが分かりやすいと判断しました(午後追記、ベクタにするいい方法を思いついたのでベクタにします)。
・ジェネリックファンクションも良いデータ構造を用意する。引数のクラスによるメソッド呼び出し用キャッシュとか…
・インタープリタとしてISLispとしてほぼ納得できるものにしてから、Cへのトランスレータを書く。
それではみなさん、Happy Hacking!
あ、あとISLisp規格ドラフトのHTMLバージョンをいろいろいじっています。