作者shyann (zzz)
看板Ruby
标题[Gem ] Ruby FFI -- 在Ruby中引用C函式库
时间Mon Nov 23 00:36:43 2009
往上搜寻 没看到有讨论这个gem 所以来野人献曝一下
如果你像我一样 想要引入自己用C写的函式
并且希望最好只用ruby就能直接调用 而且最好不用再用C改写或再编译
那麽你可以考虑这个最佳解决方案 -- Ruby FFI
我在google上 找到了几个在ruby中引入C的方法 顺便列出来比较一下
1. C Extensions
很麻烦 必须用C以特定的方式 实作胶水层 编译也很麻烦
2. swig
优点是 写好一种语言 可以生成多种语言的函式库
不过 依然面临麻烦的编译过程
如果需要传递 阵列 指标 或是结构 仍然免不了要用C Extension的方式撰写
3. RubyInline
可以直接插入一段C code 而且执行时能够自动编译 省去自己编译的麻烦
用c method 插入自己写一段C程式码去引用C函式库 就可搞定
不过 如果遇到阵列 指标 或是结构 仍然必须用C Extension的方式撰写 并用c_raw插入
4. DL lib
这个可以直接连接已有的函式库 不过用的人不多 听说有bug 不是很清楚
5. Ruby FFI
优点:
(1)直接使用ruby code实做胶水层 不需再用C
(2)基本型别自动转换
(3)可以跨不同的ruby
(4)可以layout结构
(5)可以产生c阵列 可以传递指标
(6)不用再编译 就可直接连结现有C lib
Ruby FFI这个gem出现才一年左右
目前的完成度已经可以满足一般用途
缺点是 还找不太到良好的文件可看
目前完全针对C开发 不过 理论上要连结其他语言的函式库也是有可能
高手可以研究看看
以下列出一些连结供有兴趣研究的人参考
官网
http://wiki.github.com/ffi/ffi
rubyforge
http://rubyforge.org/projects/ffi/
教学或简介网页
http://tinyurl.com/yafs8sz 线上powerpoint (英文)
http://tinyurl.com/y8tkxms (简中)
http://tinyurl.com/6bkodj (英文)
http://lifegoo.pluskid.org/?p=370 Rubinius FFI (英文)
题外话 想尝试编自己的C函式库 则可参考
http://blog.xuite.net/csiewap/cc/23626229
http://blog.xuite.net/csiewap/cc/23626528
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.109.215
1F:推 godfat:swig 也可以让 c/c++ 呼叫 ruby, 不太是同一个层级的 11/23 01:03
2F:→ godfat:但以 ruby 呼叫 c/c++ java etc, 我想 FFI 确实是最好的 11/23 01:04
3F:→ godfat:swig 那边也可以参考 rice, 做得满不错的 11/23 01:04
4F:推 KCda260:又是放在github 12/07 20:46
5F:推 godfat:不好吗? XDD 12/07 22:29