素数を洗い出すベンチで Python、Ruby、Smalltalk を戦わせてみる
Ruby1.8が遅いことと、psycoが速いことは認めるが、1.9の測定値が明らかに遅すぎる
Twitter / Yukihiro Matsumoto
経由で。
Modbook はあいにく入院中なので OQO model 02 (VIA C7M 1.6GHz) を使用。
言語 | 処理系 | 時間(上限 1000000 で統一) |
Smalltalk | VisualWorks 7.4NC | 4.8 sec |
Smalltalk | Squeak 3.9 | 20.5 sec |
Python | Python 2.5 | 25.4 sec |
Python | w/ Psyco | 4.0 sec |
Ruby | Ruby 1.8.7 | 38.2 sec |
Ruby | Ruby 1.9.1 | 23.8 sec |
爆速の VisualWorks を抑えてトップとは、Psyco、あなどれませんな。w Ruby も言うほど遅くはないような。でも、やっぱり 1.9 は期待されるより遅いですね。^^;
追記:
Modbook(MacBook 相当。Core 2 Duo 2.4GHz)が戻って来たので、念のため。
言語 | 処理系 | 時間(上限 10000000 で統一) |
Smalltalk | VisualWorks 7.6NC | 14.9 sec |
Smalltalk | Squeak 3.9 | 105.7 sec |
Python | Python 2.5 | 78.8 sec |
Python | w/ Psyco | 12.5 sec |
Ruby | Ruby 1.8.6 | 196.9 sec |
Ruby | Ruby 1.9.1 | 74.2 sec |
やはり Psyco 付きの Python は爆速ですね。
Smalltalk で使用したコードはこちら(VisualWorks、Squeak 共通)。
Time millisecondsToRun: [ | limit primes | limit := 1000000. Integer compile: 'isPrime: primes | sqrt | sqrt := self sqrt. [:break | primes do: [:i | sqrt < i ifTrue: [break value]. self \\ i = 0 ifTrue: [^false] ] ] valueWithExit. ^true'. primes := OrderedCollection new. 2 to: limit do: [:i | (i isPrime: primes) ifTrue: [primes add: i] ] ]