Ruby C绑定的执行与系统调用的Ruby包装有什么主要区别?
对于我在上下文中的问题,我正在考虑将Git版本控制功能大量合并到Ruby on Rails应用程序中。在接近这个任务时,我不明白如何思考Ruby程序的执行管道,该程序包含一个用Ruby C绑定实现的库,如yajl-ruby与Ruby包装器,用于系统调用,如{{3 }}
答案 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
功能与您的应用程序集成,因此您应该查看它。