そのような状況で役立つツールがいくつかあります ( rake-compiler
gem など) が、私は gem を使用することを好みますRubyInline
。これは、Ruby コードの低速でパフォーマンスが重要なセクションを他の言語の実装に置き換えるように設計されています (たとえば、C はすぐにサポートされます) が、外部 C ライブラリを呼び出すコードをインライン化するためにも使用されます。
RubyInline の例は次のようになります。
class MyClass
inline(:C) do |builder|
builder.include '<stdio.h>'
builder.c <<-END
void my_printf(char * string){
printf("%s\\n",string);
}
END
end
end
MyClass.new.my_printf("Abc")
# prints 'Abc'
RubyInline の優れた機能は、C と Ruby 用に別々のファイルを保持する必要がないことです。いくつかの基本的な引数の変換はすぐにサポートされており、接着コードを記述する必要はありません。悪い点は、コンパイルなどを完全に制御できないことです。個人的には、RubyInline は非常に強力なソリューションだと思います。