速度比較
私はid:sumimさんではないのですが(当たり前だ)、id:khiさんのhttp://d.hatena.ne.jp/khi/20040916
を見て現実逃避的に。SqueakのWorkspace Programming版はこんな感じ? 他の言語でもtimeToRunに相当する標準メソッドくらいはありそうですが、とりあえず等価なコードになっています。
benchmark := [:n :c | ([n timesRepeat: [c value] ] timeToRun) * 1000.0 / n. ]. fact := [:n | (2 to: n) inject: 1 into: [:s :t | s * t] ]. 'Squeak: ', (benchmark value: 10000 value: [fact value: 10]) printString, ' MicroSeconds per call'.
これだと、Pentium M 900MHzで
'Squeak: 9.8 MicroSeconds per call'
くらい。ちなみに、fact2とか言って
fact2 := [:n | n factorial].
というものを定義してみると、
'Squeak: 3.9 MicroSeconds per call'
くらいですね。khiさんの環境がどのようなものなのかわかりませんが。当然ながらSqueakの方がPythonよりは速くてそしてコードも短いわけではあります。J5があれば3倍くらいは早くなってもよさそうですね。
LargeIntegerの速度を測ったりする人が出てくることに期待。
ついでにVisualWorks 7.2では、factのほうで
'VisualWorks 7.2: 1.49 MicroSeconds per call'
fact2だと
'VisualWorks 7.2: 0.28 MicroSeconds per call'
でした。思ったより速い。さすがElliot。