セクシー素数ベンチを 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