Ruby C绑定与系统调用的Ruby Wrapper

时间:2012-05-01 09:43:48

标签: ruby binding ruby-c-extension systemwrapper

Ruby C绑定的执行与系统调用的Ruby包装有什么主要区别?

对于我在上下文中的问题,我正在考虑将Git版本控制功能大量合并到Ruby on Rails应用程序中。在接近这个任务时,我不明白如何思考Ruby程序的执行管道,该程序包含一个用Ruby C绑定实现的库,如yajl-ruby与Ruby包装器,用于系统调用,如{{3 }}

1 个答案:

答案 0 :(得分:4)

Bindings直接与库的API接口,而包装器使用系统调用从命令行调用最终用户应用程序。

Wrappers类似于UNIX管道 - 程序不了解彼此的内部并通过文本界面进行通信。但是,松耦合需要付出代价。系统调用是昂贵的操作,会大大减慢您的应用程序。

这就是绑定很棒的原因。由于它们使用库的编程接口,因此开销显着降低。 GitHub有自己的git包装器和speed was issue that led them to implement git in Ruby

他们自己做了,因为对git进行绑定很难。它不是设计用作库。直接调用它的函数真的很尴尬,因为几乎任何错误都会调用die()

对正确的git图书馆的需求促成了libgit2的发展。它甚至带有Ruby bindings!由于您希望将git功能与您的应用程序集成,因此您应该查看它。