2010-03-05 66 views
2

我期待從現有C庫生成ruby模塊。Ruby的Swig替代品?

在過去,我使用了Swig,並發現這是一個痛苦的任務。我只想檢查是否有更好的Ruby出現在那裏,以及任何陷阱。

只需要評估選擇,所以即使是一個簡單的URL指向我的網站將做!

回答

5

過去,將Ruby綁定到C(或從C到Ruby,實際上並不重要)的首選方法是手動編寫MRI C擴展。 SWIG基本上是自動化的,但以一種非常糟糕的方式,所以手寫它通常更容易,更快,更高效。

但是,MRI C擴展存在一個重大問題:它們是MRI C擴展。這很好,當時MRI是唯一的Ruby實現,但現在我們有三個準備就緒的Ruby實現,另外兩個在未來幾周內將推出,另外兩個或三個將在今年晚些時候發佈。

當然,有一個與MRI C擴展另外一個問題:你必須把它們寫在C.

一個更好的解決方案是DL library in the Ruby standard library,它允許你綁定到一個動態庫(.dll.so.dylib )在純Ruby中運行。不幸的是,它的記錄非常糟糕,正因如此,幾個Ruby實現並沒有得到很好的支持(或完全不支持):如果沒有關於「兼容實現」的含義的文檔,你將如何提供兼容的實現?

Rubinius推出了Rubinius Foreign Function Interface (FFI),這是much easier to use than DL,更容易實現 Ruby VM的作家和fully documentedspecified和​​。 JRuby馬上覆制了API,Wayne Meissner寫道two C extensions for MRI and YARVtinyrb支持它,IronRuby,MacRubyMagLev會很快。

所以,如果你使用的FFI,你就不必寫C,庫的單行會自動在MRI,YARV,JRuby和Rubinius和在今後的工作也對IronRuby的,和的MacRuby磁懸浮。

+0

謝謝Jorg。 FFI看起來很有希望。 – rmk 2010-03-09 21:28:18