Rubyインライン

今日では、Rubyプロジェクトに小さな「番号クラッシャー」を追加する必要がありました。 すぐにコードを実装し、テストしましたが、パフォーマンスに恐怖を感じました。 インラインモジュールを思い出しました。 その意味は、Cコードをコンパイルし、Rubyプログラムに動的に接続することです。 それは透過的に起こります。

これを行うには、ライブラリをインストールします。

Debian-way:

apt-get install libinline-ruby



RubyGem:

gemインストールrubyinline



フィボナッチ数の例を示します。



#!/ usr / bin / ruby​​ -w



「rubygems」が必要

「インライン」が必要

「ベンチマーク」が必要



クラスの例

def fib(n)

通貨= 0

succ = 1

n.times do | i |

curr、succ = succ、curr + succ

終わり

戻り通貨

終わり



インライン(:C)do | builder |

builder.c "

符号なしlong fastfib(符号なしlong n)

{

unsigned int n0 = 0;

unsigned int n1 = 1;

unsigned int naux;

符号なしint i;

if(n == 0)

0を返します。

for(i = 0; i <n-1; i ++){

naux = n1;

n1 = n0 + n1;

n0 = naux;

}

return n1;

}



終わり

終わり



t = Example.new;



Benchmark.measure {

40.times do | i |

t.fib i

終わり

}



Benchmark.measure {

40.times do | i |

t.fastfib i

終わり

}



顔の結果:



0.000000 0.000000 0.000000(0.001326)

0.000000 0.000000 0.000000(0.000075)





もちろん、インラインコンパイルを使用すると、最初の起動はより長くなります-将来、コードはキャッシュされます



PS:ブログをRubyに移植する



All Articles