Io fiboBench

すっかり気に入ってしまったのだが,こうなると実行速度の鈍さが気にかかる。

Number fib := method(if(self < 2, 1, (self - 1) fib + (self - 2) fib))

n := File standardInput readLine asNumber; t := Date clock
writeln("fib(".. n ..") = ", n fib, "\n", Date clock - t, " sec.")

対照言語はマイナーどころを用意。

!Integer methodsFor: 'arithmetic'!
fib ^(self < 2) ifTrue: [ 1 ] ifFalse: [ (self - 1) fib + (self - 2) fib ]!
!
stdout << 'fib(' << (N := stdin nextLine asInteger) << ') = '
       << ((Time millisecondsToRun: [ N fib printNl ]) / 1d3) << ' sec.'; nl!
Int::fib: method { return this < 2 ? 1 : this-1 .fib + this-2 .fib; }

n, t: stdin.get_s(9).to_i, clock();
%f{fib(%d) = %d\n%d sec.}(n, n.fib, clock() - t).p;
>echo 25 | io fib.io
fib(25) = 121393
4.6769999999999996 sec.

>echo 25 | gst fib.st
fib(25) = 121393
0.043 sec.

>echo 25 | xtal fib.xtal
fib(25) = 121393
0.084 sec.

…うーむ。いくら何でも遅すぎるような。