リリカルLisp ver1.6
木曜日, 3月 29th, 2012リリカルLisp ver1.6を公開しました。
約7ヶ月ぶりの更新です。
今回の変更点は高速化です。
今まで評価した引数をリストにつないでいた(いわゆるevlisを使っていた)ものを、
スタックに積む(つまり普通の手法)ものに書き換えました。
速さと引換に伝統的なLispインタプリタらしさが失われた感じです。
ちなみに、環境はいまだに連想リストで表現しているので、まだまだ速くできます。
ベンチマークとしてfib関数
(define(fib n)(if (<= n 1)1(+(fib(- n 1))(fib(- n 2)))))
で (fib 12)
を評価したところ、以下のような結果となりました。
バージョン | 実行時間(秒) | GC回数 |
---|---|---|
1.5 | 55.855 | 3 |
1.6 | 46.512 | 1 |
ヒープへのアロケーションが減った結果、GC回数が削減され、実行時間も短縮されました。
GCが発生しないプログラムでも速くなる(ことがある)ことを確認しています。
何でもかんでもスタックに置くと、apply関係で面倒な事もあるのですが、
まあ、リリカルLispで非常に長いリストを作ることもないだろうと考え、
特に工夫はしないことにしました。
--
リリカルLispを作り始めたのは、私zickが学部1回生のときですが、
気がつけば修士2回生になっており、この3月で学生生活も終わりです。
今後どうなるかはわかりませんが、
可能な範囲でリリカルLispのメンテは続けていこうと思います。
githubで公開しても、誰もメンテしてくれないしね。