Swig替代Ruby?

rmk*_*rmk 2 c ruby interface

我期待从现有的C库生成ruby模块.

在过去,我使用过Swig,发现这是一项痛苦的任务.我只想检查Ruby是否有更好的东西,以及任何问题.

只需要评估选择,所以即使是一个简单的网址指向我的网站也会做!

Jör*_*tag 5

在过去,将Ruby绑定到C(或C到Ruby,它并不重要)的首选方法是手动编写MRI C扩展.SWIG基本上可以自动化,但是以一种非常糟糕的方式,因此手动编写通常更容易,更快,更高效.

然而,MRI C扩展存在严重问题:它们是MRI C扩展.这是很好的,当MRI是唯一的Ruby实现,但现在我们有三个生产就绪的Ruby实现,另外两个将在未来几周内发布,另外两个将在今年晚些时候发布.

当然,MRI C扩展还有另一个问题:你必须用C语言编写它们.

一个更好的解决方案是在Ruby标准库DL库,它允许绑定到一个动态库(.dll,.so,.dylib在运行时),在纯Ruby.遗憾的是,它的记录非常糟糕,因此,几个Ruby实现并没有很好地支持(或完全不支持):如果没有"兼容实现"的含义的文档,你将如何提供兼容的实现?

Rubinius介绍了Rubinius外部函数接口(FFI),它比DL更容易使用,更容易为Ruby VM编写器实现,并且完全记录,指定测试.JRuby立即复制了API,Wayne Meissner写了两个用于MRI和YARV的C扩展,tinyrb支持它,IronRuby,MacRubyMagLev很快就会完成.

因此,如果您使用FFI,则不必编写单行C语言,并且您的库将自动处理MRI,YARV,JRuby和Rubinius以及将来还可以使用IronRuby,MacRuby和MagLev.