素数を洗い出すベンチで 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 で使用したコードはこちら(VisualWorksSqueak 共通)。

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]
    ]
]