[Gem ] Ruby FFI -- 在Ruby中引用C函式庫

看板Ruby作者 (zzz)時間15年前 (2009/11/23 00:36), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串1/1
往上搜尋 沒看到有討論這個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

11/23 01:03, , 1F
swig 也可以讓 c/c++ 呼叫 ruby, 不太是同一個層級的
11/23 01:03, 1F

11/23 01:04, , 2F
但以 ruby 呼叫 c/c++ java etc, 我想 FFI 確實是最好的
11/23 01:04, 2F

11/23 01:04, , 3F
swig 那邊也可以參考 rice, 做得滿不錯的
11/23 01:04, 3F

12/07 20:46, , 4F
又是放在github
12/07 20:46, 4F

12/07 22:29, , 5F
不好嗎? XDD
12/07 22:29, 5F
文章代碼(AID): #1B2MYTal (Ruby)
文章代碼(AID): #1B2MYTal (Ruby)