Scheme スピードテスト
きょうはちょっとした思いつきで Scheme のスピードテストをやってみた。
内容は 123^300000(30万乗)の計算をさせるという単純なもの。テストしたのは7つの Scheme で答を出力できたのは3つだけだった。設定を変えればよいのかもしれないが面倒なので正常に終了したものだけを挙げると以下のとおり。
① Ypsilon(イプシロン) 52秒
② Schluessl(シュリュッセル) 1分40秒
③ Gauche(ゴーシュ) 5分23秒
なお、計測中は DVDで映画を観ていた。実行中は静止させていたよ。
でも、そういういい加減な環境で、目覚まし時計の秒針で計ったということだけど、どれもおなじ条件だからね。
それでこの結果。ちなみのぼくの PC は Windows7 64bit版 メモリ 12GB だ。
ついでにそのほかの言語もやってみた。
結果は以下のとおり。
① SWI-Prolog 1秒 強(2秒掛かっていないが計れなかった)
② Haskell 6秒
③ Python 3.4.2 9秒
④ PyPy 2.4.0 20秒
⑤ Frink 52秒
⑥ J 2分3秒
まぁ、これは、ディスプレイに数字を打ち終わった時点までの時間で本質的でない部分が含まれていると思う。それにしても工夫なしで計算してくれて出力し終わってくれる、これがすごくないかい。すごいと思うし、ありがとうって感じ。
なお、GAP でも試した。表示は瞬時だったが、
gap> 123^300000;
<integer 341...001 (626972 digits)>
こんな感じの表示だったので、こんかいは対象外とした。でも、たしかに計算は終わっているようだよね。このドイツ製の GAP に注目か!?
なお、Factor でも試そうと思ったが落ちるのが目に見えているのでやらなかった。Factor はじつに魅力的な言語だけど、現時点では、大きな計算負荷を掛けると落ちてしまう。【追伸】とはいえあになって気になったので試したが、123^300000(30万乗)どころか 123^3000 でダウン。
Factor はぼくが大好きになりつつある言語なので、こんごの改善を期待したい。
さて、スピードテストといってもこんかいのような単純な計算ひとつだけのテストで順位を付けられては言語の開発側もたまったもんじゃないだろう。もっと総合的に評価しなければならないことは承知している。だから、あくまでもこの計算ではこうだったというひとつの参考程度に考えてほしい。
Ypsilon のサイト(http://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon)には、以下のように書かれている。
『Ypsilon Scheme System(イプシロン・スキーム・システム)はプログラミング言語Schemeの最新規格R6RS*に準拠する実装です。インタープリタの特性を活かしてスピーディーでインタラクティブなアプリケーション/ユーザーライブラリーの開発を可能にします。またマルチコアCPU用に最適化した Mostly Concurrent Garbage Collection を実装することにより、極めて短いGC停止時間と並列実行によるパフォーマンスの向上を達成しています。』
Ypsilon にはその他、Factrial や 素数関係の計算もさせてみたが、いずれも高速だったよ。
【追伸】
この記事の投稿のあと、CLISP と MIT/GNU-Schme、SISC、Kawa でもテストをおこなった。CLISP はスタック不足で停止。スタックを増やそうとはしなかった。MIT/GNU-Scheme は 44秒、SISC は 45秒、Kawa は 1分40秒とともに高速だった(ただし、テスト中に DVD ソフトは起動していなかった)。