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