今日では、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に移植する