読者です 読者をやめる 読者になる 読者になる

年金ロボットをめざして

FX(外国為替証拠金取引)自動運用ロボットの開発ブログのはずだった

Scheme スピードテスト

プログラミング言語

きょうはちょっとした思いつきで Schemeスピードテストをやってみた。

f:id:fxrobot:20141222055255j:plain

内容は 123^300000(30万乗)の計算をさせるという単純なもの。テストしたのは7つの Scheme で答を出力できたのは3つだけだった。設定を変えればよいのかもしれないが面倒なので正常に終了したものだけを挙げると以下のとおり。

① Ypsilon(イプシロン)                 52秒
② Schluessl(シュリュッセル)   1分40秒
Gauche(ゴーシュ)               5分23秒

f:id:fxrobot:20141222053852j:plain

 なお、計測中は 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 でダウン。

f:id:fxrobot:20141222045125j:plain

Factor はぼくが大好きになりつつある言語なので、こんごの改善を期待したい。

さて、スピードテストといってもこんかいのような単純な計算ひとつだけのテストで順位を付けられては言語の開発側もたまったもんじゃないだろう。もっと総合的に評価しなければならないことは承知している。だから、あくまでもこの計算ではこうだったというひとつの参考程度に考えてほしい。

Ypsilon のサイト(http://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon)には、以下のように書かれている。

f:id:fxrobot:20141222050131j:plain

『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 ソフトは起動していなかった)。