--- layout: old_post title: RubyにCのコードを埋め込むRubyInlineが面白い permalink: /tatsuya/show/299-ruby-c-rubyinline ---
RubyInline面白い!特徴としては
ていう感じ。とりあえず10000回加算でも試してみる、まずgemからインストール
gem install RubyInline
いつも通り完了、で使ってみる
require "rubygems" require "inline" class Test inline do |builder| builder.c <<-EOF int plus_inline(int x, int y){ int z=0; int a; for(a=0; a<y; a++){ z = z + x; } return z; } EOF end def plus_ruby(x,y) z = 0 y.times{ z += x } return z end end test = Test.new time = Time.now p test.plus_inline(1,100000) inline_time = Time.now - time time = Time.now p test.plus_ruby(1,100000) ruby_time =Time.now - time p ruby_time/inline_time
こんな感じで行けるらしい、凄い違和感があるけど迷わず実行
$ ruby rubyinline.rb 100000 100000 119.4128113879 $ ruby rubyinline.rb 100000 100000 170.04469273743 $ ruby rubyinline.rb 100000 100000 170.68156424581
初回で119倍!2回目以降はコンパイルがキャッシュに乗るから170倍!
コンパイルのありorなしの差が、1.7倍てのが妙に少ない気もするけどどうなんだろ?
確かに ~/.ruby_inline というディレクトリの下にキャッシュのファイルが貯まってるみたいだけど
$ cd ~/.ruby_inline/ $ ls Inline_Test_dc80.bundle Inline_Test_dc80.c
コードが凄い気持ち悪いけど、ボトルネックのポイント・ポイントで使えば面白そう
負荷対策&高速化の対策として覚えとくと、いつか使う場所が出てくるかも。