2

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

对于我的问题,我正在考虑将 Git 版本控制功能大量整合到 Ruby on Rails 应用程序中。在处理这项任务时,我不明白如何考虑 Ruby 程序的执行管道,该程序包含使用 Ruby C 绑定(如yajl-ruby )实现的库与用于系统调用(如git Ruby Gem )的 Ruby 包装器。

4

1 回答 1

5

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

包装器类似于 UNIX 管道——程序不了解彼此的内部结构,而是通过文本接口进行通信。不过,松散耦合是有代价的。系统调用是昂贵的操作,会显着减慢您的应用程序。

这就是绑定很棒的原因。由于它们使用库的编程接口,因此显着减少了开销。GitHub 有自己的git包装器,速度是导致他们git在 Ruby中实现的问题。

他们自己做是因为很难为git. 它不是为用作图书馆而设计的。直接调用它的函数真的很尴尬,因为它die()几乎会调用任何错误。

对适当git图书馆的需求导致了libgit2. 它甚至带有Ruby 绑定!由于您想将git功能与您的应用程序集成,您应该检查一下。

于 2012-06-01T21:47:20.137 回答