バインディングはライブラリのAPIと直接インターフェイスし、ラッパーはシステムコールを使用してコマンドラインからエンドユーザーアプリケーションを呼び出します。
ラッパーは、UNIXパイプと似ています。プログラムは、お互いの内部についての知識がなく、テキストインターフェイスを介して通信します。しかし、疎結合には価格が付いています。システムコールは高価な操作であり、アプリケーションの処理速度を大幅に低下させます。
これはバインディングが優れている理由です。ライブラリのプログラミングインターフェイスを使用するため、オーバーヘッドが大幅に削減されます。 GitHubは独自のgit
ラッパーとspeed was issue that led them to implement git
in Rubyを持っていました。
git
のバインディングを作成するのは難しいため、彼ら自身で行いました。ライブラリとして使用するようには設計されていませんでした。それはかなり多くのエラーでdie()
を呼び出すので、直接その関数を呼び出すことは本当に扱いにくいです。
適切なgit
ライブラリの要求により、libgit2
が開発されました。それにはRuby bindingsも付属しています! git
機能をアプリケーションに統合したいので、チェックアウトする必要があります。
徹底的に書かれた回答をありがとう! [git'のRubyラッパー(https://rubygems.org/gems/git)と['libgit2'Rubyバインディング](https://github.com/libgit2/rugged)の両方には、 git submodule'](http://git-scm.com/book/en/Git-Tools-Submodules)機能の違いを理解する助けになりました。 [git submodule](http://git-scm.com/book)を採用するために、[git'のRubyラッパー(https://rubygems.org/gems/git)の拡張に向けて作業を開始すると思います/ ja/Git-Tools-Submodules)の機能性を向上させることができます。 – rudolph9