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に移植する

Source: https://habr.com/ru/post/J23976/


All Articles