Rubyは遅いです。しかし、その中で最も問題があるのはどの部分でしょうか。
柔軟性を確保するために、メソッドの「レイトルックアップ」を行います。これにより、かなり遅くなります。また、eval を可能にするためにコンテキストごとに変数名を覚えておく必要があるため、フレームとメソッドの呼び出しが遅くなります。また、MRI 1.9 にはバイトコード コンパイラ (より優れている) があり、jruby はそれを Java バイトコードにコンパイルし、HotSpot JVM の JIT コンパイラを介してコンパイルできますが、現在は適切な JIT コンパイラがありませんが、最終的には約1.9と同じ速度。
ガベージ コレクタはパフォーマンスにどの程度影響しますか? 特に OpenGL ライブラリを使用している場合は、ガベージ コレクターだけを実行するのに数秒かかることがありました。
http://www.igvita.com/2009/06/13/profiling-ruby-with-googles-perftools/のいくつかのグラフから、約 10% かかると思いますが、これはかなりの量です。 gc.c の malloc_limit を増やして再コンパイルすることで、そのヒットを減らします。
特に遅い Ruby で行列数学ライブラリを使用しました。Ruby が基本的な数学を実装する方法に問題はありますか?
Ruby 1.8 は数値クラスを実装する基本的な数学を「実装しませんでした」。Fixnum#+ Fixnum#/ のようなものを 1 回の呼び出しで 1 回呼び出しますが、これは遅かったです。Ruby 1.9 は、いくつかの基本的な数学演算をインライン化することで、少しごまかしています。
効率的に実装できないRubyの動的機能はありますか? もしそうなら、Lua や Python のような他の言語はこれらの問題をどのように解決しますか?
eval のようなものを効率的に実装するのは難しいですが、多くの作業を行うことができると確信しています。Ruby のキッカーは、クラスの定義を自発的に変更する別のスレッドの誰かに対応する必要があることです。そのため、非常に保守的でなければなりません。
パフォーマンスを大幅に改善した最近の作業はありますか?
1.9 は 2 倍のスピードアップのようなものです。また、スペース効率も向上します。JRuby は常に速度の向上に努めています [そして、おそらく KRI よりも GC に費やす時間が少ない]。それに加えて、自分が取り組んでいるちょっとした趣味のこと以外はあまり意識していません。また、1.9 の文字列は、エンコードしやすいため、時々遅くなることにも注意してください。