ベンチマークとかよくわからないけど、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
- Intel Celeron 2.53GHz, 2.00GB RAM
- Microsoft Windows XP SP3
- VMware Player 3.0.0 build-203739
- Ubuntu Server
- Io 20090105, Ruby 1.8.7
こういう環境で動かした。どういう情報を出せばいいのかわからないので、わかるところをたくさん書いておいた。
結論から言うと、たぶん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を使わない、っていうのがめちゃめちゃ尖ってるかんじ。