速度比較

私は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。