nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

一年が経ちました

早いもので一年が経過しました。
nptの開発のために立ち上げたブログですが、 思ったより進んだような気がします。
ブログを書き始めた当時なんて、絶対作れないと思ってたんですが、 あと残り3つの関数を作成できれば完成です。
ただ、ここからが長いかもしれません。

今回はnptの致命的な欠点を話題に出します。
それは速度です。
遅すぎる。
まあバグがいっぱいあるのも致命的なんですけどね。

nptはネイティブな機械語を使っていないので遅いのは当然なのですが、 それにしたって、まともに使用できる限界を超えています。
例として、nptC言語のソースを生成するプログラムである、 mk.eastasian.lispというプログラムの実行時間を示します。

$ time sbcl --script mk.eastasian.lisp

real    0m0.119s
user    0m0.083s
sys     0m0.016s


$ time ccl -l mk.eastasian.lisp -e '(quit)'

real    0m0.359s
user    0m0.154s
sys     0m0.008s


$ time clisp -m 2g mk.eastasian.lisp

real    0m2.291s
user    0m2.285s
sys     0m0.011s


$ time npt --script mk.eastasian.lisp

real    1m1.046s
user    0m58.610s
sys     0m2.425s

sbclccl機械語で実行できるため、とても早く1秒以内で終わっています。
機械語を用いていないclispでも2.2秒。
それに対してnptは1分越え。ひどい。
sysが2秒越えって、何に使ってるんだ?

インタープリタの部分が致命的にダメなのだとは思います。
標準関数はCで書かれているので、たぶん早いはずなんです。

色々な工夫をしているはずなのですが、どうしたらいいんでしょうね。
とりあえずは最適化を作ろうかと思っています。
現状では、一切の最適化が存在してないのです。
それ以外にも、速度の改善は優先して行おうと思います。
というのも自分が使いたいんです。
これじゃあ使い物にならん。

この遅さなら最適化だけではどうにもならないでしょう。
ダメなら全体の考え直しです。
つらいけど、でもまあ仕方がない。
どうしていいのか全然わからないので、 できることを一つずつやって行こうと思います。

速度を解決しないとどうにもなりませんね。