在Ruby中直接运行C代码的可能性?
发表时间: 2019-05-12 09:15
我们知道ruby通过C EXT(C扩展)可以很方便的运行C代码,其实只要是C接口的语言都可以,比如汇编语言也可以。
但是一些比较简单的C代码难道还得费劲用C扩展的方式吗?其实ruby gem里有RubyInline包,通过它可以在ruby源代码里写C代码,然后调用执行!
直接用 gem install RubyInline 安装吧!我们测试一下:
require 'inline' class A inline do |b| b.include '<stdio.h>' b.flags=["-std=c99"] b.c " int show(int i,int j) { return i+j; }" b.c "int main(void) { puts(\"hello world!\"); return 0; }" b.c 'void fast_inc(long x) { long long v = 0; for(long i=0;i<x;++i) for(long j=0;j<x;++j) for(long k=0;k<x;++k) v += i+j*k; //printf("now is %ld , %ld , %ld\n",i,j,k); printf("v is %lld\n",v); }' endend a = A.newputs a.show(1,2)a.main()a.fast_inc(90000000000000)
可以看到ruby中能很方便的调用C中的函数,超级简单,脑子就不停在C和ruby之间切换吧 ;)
因为上面代码里使用了了C99的语法,所以要在flags中设置C99选项.
注意flags是以数组而不是字符串来赋值的!
ruby中调用C随心所欲,你值得拥有!