セクシー素数ベンチを Squeak Smalltalk で
「本家の5倍速? Pythonで実装したRuby処理系の「Topaz」が登場:Rails Hub情報局:エンジニアライフ」経由で「差が6となる素数ペアをリストアップする(割とRubyっぽい?)コード」の非効率な実装がベンチに使われていて面白そうだったので Squeak Smalltalk でも試してみた。
| isPrime sexyPrimes | isPrime := [:n | (2 to: n-1) allSatisfy: [:i | n \\ i ~= 0]]. sexyPrimes := [:n | (9 to: n) collect: [:i | {i-6. i}] thenSelect: [:e | e allSatisfy: isPrime] ]. [sexyPrimes value: 100000] timeToRun "=> 23152 "
単位はミリ秒なので 23秒くらい。
Ruby 1.9.3 で試した結果は 100 秒だったので、その4倍強の速さか。残念ながら自分の環境(というかスキル)では PyPy がビルドできず Topaz は試せなかったが、もし煽りのタイトルどおりならもうちょっと速いことになる。
追記:
Windows 32-bit のバイナリが提供されていたので試したら、なんと 8秒! 思ったより速かった。
$ topaz/bin/topaz -v sexy_primes_bench.rb topaz (ruby-1.9.3p125) [i686-windows] 8.095000