ベンチマーク?

ベンチマークとかよくわからないけど、timeというコマンドでできるみたいなので、ちょっとやってみた。

benchrmark.rb

#!/usr/bin/env ruby

puts (1..1000).to_a.inject(:+)

benchmark.io

#!/usr/bin/env io

Range setRange(1, 1000) asList reduce(+) print

こういう環境で動かした。どういう情報を出せばいいのかわからないので、わかるところをたくさん書いておいた。

結論から言うと、たぶんRubyの方が速い。

S | v | Z < time io io/benchmark.io
500500 io io/benchmark.io 0.10s user 0.16s system 59% cpu 0.440 total

S | v | Z < time ruby ruby/benchmark.rb
500500
ruby ruby/benchmark.rb 0.00s user 0.02s system 39% cpu 0.061 total

7倍くらい速いのかな。まあ、速度だけで単純な優劣をつけることはできないけど、ふと、CGIアプリケーションとして動かせたらおもしろいかも、とおもったので、実行速度がどんなものなのか調べてみた。

ただ、ベンチマークで走らせたスクリプトとCGIアプリケーションなどの「本番」で動くスクリプトはまた違うし、走らせるコードによっては、もしかしたらIoLanguageのほうが速いかもしれない。

あまりベンチマークとは関係ないけど、IoLanguageではプリミティヴであるはずの Map や List についてのリファレンスが載ってなかったり、コード例では 1 to(1000) みたいなコードで Range が得られるっぽいのに、 Numer does not respond to 'to' とか怒られるし、ドキュメントがないのでどうしようもない。

@aereal Range; みたいなのを先にやって、モジュール読み込まないとだめだったと思います。(import とかいらずに "Range" だけでいいです)

Twitter / anekos: @aereal Range; みたいなのを先にやって ...

@anekos さんにTwitterで指摘を頂いたように、Rangeを読みこんだら、 1 to(1000) が通った。

モジュール読み込み (みたいなの) が必要なのに、importとかrequireを使わない、っていうのがめちゃめちゃ尖ってるかんじ。