Rubyが遅いといわれる原因

RubyVMインタープリタが遅いといわれてきましたが
実際はそればかりではありません。


Rubyスクリプトで書かれたクラスライブラリの
設計の不味さもあると思います。


Rubyの標準添付ライブラリの中にはメモリ消費を
抑えることを優先して処理速度は二の次扱いの
設計となっているようにみえるものがあります。


組込み系の環境で動作させることを意識した
結果?


少ない容量のメモリを積んだ環境をサポートすることを
優先したクラス設計のため、大容量のメモリを積んだ
環境では十分な処理速度を得られない状態に
なっているようにみえます。


少ない容量のメモリを積んだ環境と大きい容量のメモリを
積んだ環境では最適なクラス設計が異なるはずです。


Javaのように環境毎にプロファイルを設定して、
環境毎に標準添付クラスライブラリの最適化基準
を用意して、標準添付クラスライブラリをブラッシュ
アップすれば標準添付クラスライブラリを利用した
スクリプトで環境毎にベストな処理性能
を発揮できるようになると思います。


Rubyの組込クラスライブラリについてもプロファイル
に基づいて環境毎に最適化すれば、環境によっては
今以上の性能になるのではないかと思います。


上記の最適化はマクロの視点での最適化で
ミクロ視点(ハードやOSの挙動等低レベルを意識
した視点)での最適化ではありません。


1.9でVMインタープリタの処理速度はかなり改善
されていますが、VMインタープリタの改善による
恩恵をそれほど享受できないクラスライブラリも
あります。


その原因もまた、クラスライブラリの設計の不味さに
あると思われます。


推敲中。


[蛇足]
Rubyでは現状、事前コンパイル環境は提供されていないので
1.9でもバイトコードコンパイラによる最適化はほとんど
行われていません。


小手先の最適化が有効な場面が多いと思われますが、
小手先の最適化が行われていないクラスライブラリが
多いのが現状です。

とおりすがり 2009/05/09 10:56
オープンソースなんだから、再設計して実装して貢献すれば?

#とおりすがりさん、コメントどうも。
#
#再設計するほどのことではなく、
#処理速度がほとんど意識していないので、
#意識して多少クラスの最適化を行えば
#済むという程度のことなんです。
#
#オープンソースなのでお前がしろというご意見は
#もっともだと思いますが、自前で最適化したとして
#自前で最適化したものを公開した場合にMRI等に
#含まれる実装よりもそちらを使ってくれる人間が
#どれだけいるか、どれくらいの需要があるのか
#わかりません、需要がわからないモノに対して
#時間を掛ける気にはなりません。
#
#やるなら、せめて標準添付ライブラリのうち、
#マクロの視点の最適化で処理速度向上が見込める
#ライブラリ全てをその対象にしないと意味が
#ありません。
#
#自前で最適化したコードをMRI等に最終的に
#取り込んでもらうことを念頭においたとしても
#MRI等が何らかの理由があって処理速度に傾倒した
#最適化を行っていないのであれば、取り込んでもらう
#ことはできません。
#
#MRI等ではそれなりの頻度で変更が行われるので、
#その変更に対して追随して最適化して
#いくのは大変です。
#
#自前で最適化したライブラリを公開したとして、
#同様の最適化をMRI等の開発チームが行えば、
#自前での最適化に要した時間全てが無駄に
#なります。
#
#結局、ユーザ全てが恩恵を得るのに総合的に考えて
#最も労力の少ない方法は標準添付ライブラリや
#組込ライブラリを熟知している開発者(MRI等の
#開発チームの担当者)サイドで処理速度を意識して
#クラスの最適化を行ってもらうしかありません。
#
#個人では、自分が利用するライブラリのうち
#処理速度に不満のあるライブラリのみに
#処理速度への最適化を行って利用すると
#いう結論になります。自分がターゲットとする
#環境のみに限定して処理速度を意識した最適化を
#行うだけで済みます。
#