Ruby C 绑定(bind)的执行与系统调用的 Ruby 包装器之间的主要区别是什么?
对于我的问题,我正在考虑将 Git 版本控制功能大量集成到 Ruby on Rails 应用程序中。在完成这项任务时,我不明白如何考虑 Ruby 程序的执行管道,该程序包含一个用 Ruby C 绑定(bind)实现的库,例如 yajl-ruby。与系统调用的 Ruby 包装器相比,例如 git Ruby Gem .
最佳答案
绑定(bind)直接与库的 API 交互,而包装器使用系统调用从命令行调用最终用户应用程序。
包装类似于 UNIX 管道——程序不知道彼此的内部结构并通过文本界面进行通信。不过,松耦合是有代价的。系统调用是昂贵的操作,会显着降低您的应用程序速度。
这就是绑定(bind)很棒的原因。由于他们使用库的编程接口(interface),开销显着减少。 GitHub 有自己的 git
包装器,和 speed was issue that led them to implement git
in Ruby .
他们自己做了,因为为 git
做绑定(bind)有点困难。它并非设计用作图书馆。直接调用它的函数真的很尴尬,因为它会在几乎所有错误上调用 die()
。
对适当的 git
库的需求导致了 libgit2
的开发.它甚至带有 Ruby bindings !由于您想将 git
功能与您的应用程序集成,因此您应该检查一下。
关于Ruby C 绑定(bind)与系统调用的 Ruby 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395995/