rud*_*ph9 2 ruby binding systemwrapper ruby-c-extension
Ruby C 绑定的执行与系统调用的 Ruby 包装器之间的主要区别是什么?
对于我的上下文问题,我正在考虑将 Git 版本控制功能大量合并到 Ruby on Rails 应用程序中。在完成这项任务时,我不明白如何考虑 Ruby 程序的执行管道,该程序结合了使用 Ruby C 绑定实现的库,例如yajl-ruby与用于系统调用的 Ruby 包装器,例如git Ruby Gem。
绑定直接与库的 API 接口,而包装器使用系统调用从命令行调用最终用户应用程序。
包装器类似于 UNIX 管道——程序不了解彼此的内部结构,并通过文本界面进行通信。不过,松耦合是有代价的。系统调用是昂贵的操作,会显着降低您的应用程序的速度。
这就是绑定很棒的原因。由于它们使用库的编程接口,因此开销显着降低。GitHub 有自己的git包装器,速度是导致它们git在 Ruby 中实现的问题。
他们自己做了,因为很难为git. 它不是为了用作图书馆而设计的。直接调用它的函数真的很尴尬,因为它调用die()了几乎所有的错误。
对适当git库的需求导致了libgit2. 它甚至带有Ruby 绑定!由于您想将git功能与您的应用程序集成,您应该检查一下。