【问题标题】:Ruby C Bindings vs. Ruby Wrapper for System Calls用于系统调用的 Ruby C 绑定与 Ruby 包装器
【发布时间】:2012-05-01 09:43:48
【问题描述】:

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

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

【问题讨论】:

    标签: ruby binding ruby-c-extension systemwrapper


    【解决方案1】:

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

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

    这就是绑定很棒的原因。由于它们使用库的编程接口,因此显着减少了开销。 GitHub 有自己的 git 包装器和 speed was issue that led them to implement git in Ruby

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

    对合适的git 库的需求导致了libgit2 的发展。它甚至带有Ruby bindings!由于您想将git 功能与您的应用程序集成,您应该检查一下。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多