たらいまわし大会

たらいまわしまくってみた。

(tarai 12 6 0) (ytarai 12 6 0) ytarai/tarai
gcc -O3 -fomit-frame-pointer 0.06 0.12 2.
g++ TMP 0.00 x x
gforth 1.18 x x
pforth 4.57 x x
runhugs 0.24 x x
ghc 0.00 x x
ocaml 1.40 x x
perl 18.08 x x
python 7.62 45.94 6.0
ruby 17.32 x x
guile 9.36 30.11 3.2
gosh 1.54 26.34 17.
ypsilon 0.97 12.98 13.
scm -f 6.80 33.93 5.0
elk -l 35.25 115.73 3.3
mzscheme -r 2.15 4.91 2.3
stalin -Ob -Om -On -Or -Ot -k -architecture IA32 -copt -O3 -copt -fomit-frame-pointer -copt -Wall -copt -freg-struct-return 0.04 0.26 6.
csc -O3 -Ob 0.09 1.06 11
bigloo -unsafe -fno-reflection -Obench -O6 -copt -O3 -copt -fomit-frame-pointer -copt -freg-struct-return 0.05 3.29 66
gsc 0.42 3.85 9.2

通常のたらいまわし

g++ TMP, ghc >>(コンパイル時計算の壁)>>gcc, stalin, bigloo>>(ネイティブの壁)>>gforth, ocaml, ypsilon, gosh, mzscheme>>(LLの壁)>>perl, python, guile, scm>>(よく分からない壁)>>ruby, elk
インタプリタ同士でも結構な差が出てしまう。

Y-Combinator

処理系によって速度比が大きく異なるのは何が原因なのだろう。どのような処理を高速化するかというバランスの違いなのかな。