2012-05-01 29 views
1

什麼是Ruby的C綁定的執行與Ruby的包裝系統調用之間的主要區別是什麼?Ruby的C綁定與紅寶石包裝系統調用

我的問題的來龍去脈,我期待到整合Git版本控制功能大舉進入一個Ruby on Rails應用程序。在接近這個任務我不明白如何看待Ruby程序的執行流水線,其採用了與Ruby的C綁定實現了一個庫,如yajl-ruby與一個Ruby包裝器系統爲git Ruby Gem調用此類。

回答

4

綁定直接與庫的API接口,而包裝使用系統調用來調用命令行的最終用戶應用程序。

包裝器類似於UNIX管道 - 程序沒有對方的內部知識,並通過文本接口進行通信。儘管如此,鬆耦合還是有代價的。系統調用是昂貴的操作,並會顯着減慢您的應用程序。

這就是綁定很好的原因。由於他們使用庫的編程接口,開銷顯着降低。 GitHub有它自己的git包裝,和speed was issue that led them to implement git in Ruby

他們這樣做,他們自己,因爲它是一種很難使綁定git。它不是被設計成用作圖書館的。直接調用它的函數真的很尷尬,因爲幾乎所有的錯誤都會調用die()

對適當的git圖書館的需求導致了libgit2的發展。它甚至還附帶Ruby bindings!由於您想將git功能與您的應用程序集成在一起,因此您應該檢查它。

+1

謝謝你的詳盡,寫得很好的答案! [git'的Ruby包裝器(https://rubygems.org/gems/git)和['libgit2'Ruby綁定器](https://github.com/libgit2/rugged)都缺少需要的['' git submodule'](http://git-scm.com/book/en/Git-Tools-Submodules)功能,但您已經幫助我理解它們之間的差異。我相信我會着手擴展[git的Ruby包裝器](https://rubygems.org/gems/git)來使用['git submodule'](http://git-scm.com/book/en/Git-Tools-Submodules)功能,因爲它可能實現的障礙較低。 – rudolph9