Ruby初心者スレッドPart4
■ このスレッドは過去ログ倉庫に格納されています
0867デフォルトの名無しさん
2006/03/22(水) 10:08:12YARVで高速になる理由は主に3つあります。
・木構造をやめて命令(バイトコード)の配列にすること・・・
現在のRubyは、プログラムを内部で木構造に変換し、木構造をたどりながら実行します。
YARVは、その木構造を(簡単にいえば)命令の配列に変換して実行します。
基本的には、木構造をたどるよりは配列にアクセスするほうが速いので、YARVのほうが高速になります。
・バイトコードにすると高速化のテクニックを流用できること・・・
C言語などのコンパイラで研究された高速化のための細かなテクニックが、バイトコードインタプリタにも流用できます。
詳しくはコンパイラの本を買って「最適化」に関する章を読んでください。
・CPUのネイティブコードに変換する機能をもっていること・・・
JITやAOTコンパイラを使うことで、Rubyのプログラムの一部をネイティブコードに変換しているようです。
YARVでどこまで実現しているかはよくしらないけど、JVMはJITでかなーり高速化されました。
YARV(というかバイトコードインタプリタ)にして速くなる理由は主にこの3つです。特に前2つは重要。詳しくは、中の人のプレゼン資料を読むとよいでしょう。
http://www.atdot.net/yarv/youth_2004_sasada_final.ppt
ただ、Rubyは最適化しにくい(高速化することをほとんど考慮されていない)言語なので、YARVにしたところでPHPやPythonより速くなるかどうかは微妙です。
ベンチマークではかなり高速化されたという結果がでてますが、それがWebアプリなどでもそのまま反映されるとは限りません。
Rubyを使うなら、ほかの言語との速度比較でもんもんするより、「自分にとって必要な速度(受け入れられる速さ)でうごけばそれでよい」と割り切ることをおすすめします。
個人的には、YARVがネイティブスレッド対応らしいので、高速化よりもそっちのほうに期待です。
あと、1プロセスで複数インスタンスが作成できるようになるようなので、Webアプリではこっちのほうがうれしいと思います。でもCGI環境じゃ使えません。残念。
以上です。お役に立てれば。
■ このスレッドは過去ログ倉庫に格納されています