速度
Gauche って結構速いらしい。CLISP は遅い。GCL は速い。
それというのも、大学の課題の N-Queens を解くコードのプロトタイプを Scheme で書いて、うまくいったからさて課題で定められてる Common Lisp にコードを書き換えて clisp にやらせたら、まあ遅かったわけです。コンパイルできることに気付いてコンパイルしたら多少速くなったけど、それでも遅い。
以下それぞれ 8-Queens を解いてもらう。求める解は一つ。
Gauche
gosh> (load "./n-queens.scm") #t gosh> (time (n-queens 8)) ;(time (n-queens 8)) ; real 0.740 ; user 0.730 ; sys 0.000 ((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))
[1]> (load "n-queens.lsp") [2]> (time (n-queens 8)) Real time: 8.19814 sec. Run time: 8.192512 sec. Space: 47481224 Bytes GC: 90, GC time: 0.652032 sec. ((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1)) [3]> (compile-file "n-queens.lsp") [4]> (load "n-queens.fas") [5]> (time (n-queens 8)) Real time: 1.467878 sec. Run time: 1.464092 sec. Space: 13066840 Bytes GC: 25, GC time: 0.144006 sec. ((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))
>(load "n-queens.lsp") >(time (n-queens 8)) real time : 5.630 secs run-gbc time : 4.450 secs child run time : 0.000 secs gbc time : 1.050 secs ((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1)) >(compile-file "n-queens.lsp") >(load "n-queens.o") >(time (n-queens 8)) real time : 0.420 secs run-gbc time : 0.420 secs child run time : 0.000 secs gbc time : 0.000 secs ((4 . 8) (2 . 7) (7 . 6) (3 . 5) (6 . 4) (8 . 3) (5 . 2) (1 . 1))
俺の書いた N-Queens のコードになんか問題とかが色々あるとか想定したとしても。Scheme と Common Lisp でコードはまずまったく等価に書いたし。わりとびっくりした。