2011-12-25 23 views
21

ソフトウェアポータビリティのコンテキストでは、この3つの概念の違いは何ですか?ラッパー、バインディング、およびポートの違いは何ですか?

たとえば、元のncursesライブラリはC言語で書かれていますが、アプリケーションはC++で書かれています。その後、 "ncurses wrapper"、 "ncursesへのバインディング" ncurses port "と入力します。どちらを使うべきですか?

それぞれの賛否両論は何ですか?

+0

より多くの文脈を与えない限り、あなたが話していることを言うことは不可能です。 –

答えて

36

wrapperは、機能をリサイクルするために他のコードの上に座っているコードですが、インターフェイスは異なります。これは、通常、同じ言語で記述されたインタフェースを意味します。また、技術的に意味するものがバインディング(自分自身を含む)であるときに、ラッパーと言うこともあります。

長所:

  • これは、完全な書き換えを必要とせずに機能を強化したり、再利用し、元
  • ラッパーと同じ言語であります。
  • 比較的速く達成する
  • ソースライブラリが変更されると、簡単に更新されます。関数/クラスの予想される入出力を変更して下位互換性を壊さない限り、新しい関数をバインドするだけで済みます。

短所:

  • ライブラリ全体をラップは非常に反復することができ

binding他のコードの上に座っているコードの他のビットは、それが今回のバインディング以外の機能だリサイクルすることです彼らが縛っているものとは異なる言葉で書かれています。注目すべき例は、QTのPythonバインディングであるPyQtです。

長所:

  • お好みの言語に他の言語からの機能を持参してください。
  • ポートと比較して相対的に速い
  • ラッピングの場合と同じレベルの簡単な変更が必要です - 関数/関数の予想される入出力を変更して下位互換性を壊さない限り、おそらく新しい関数/クラス。

短所:

  • あなたはおそらくどちらかの端

にインタプリタ言語を含む任意のラッパー、特に、かなり大規模なパフォーマンスヒットを取っているラッパー

  • と同じように繰り返しA Portは、異なる環境で動作するようにいくつかのコードを翻訳するときです。一般的なアナロジーには、XBoxと呼ばれるゲームがあり、後でPS3用にリリースされます。

    長所:

    • あなたが不備
    • を見るようにあなたはそれがないだけで何、コードの実行方法に精通していないだろうあなたのコードベースに改良をする機会を与えます。

    短所:断然

    • 時間の面でlengthiestソリューション/
    • あなたが言語のソースライブラリのニーズがで利用可能でどんな機能があることを確認する必要があり、完全な書き換えを必要とし、あなたの
    • ソースライブラリが更新されるたびに、変更内容を翻訳するか、後ろ向きになる危険性もあるため、更新する必要があります。
  • +0

    すばらしい説明! – jweyrich

    +0

    ラッパーのパフォーマンスに大きな影響はありますか?パフォーマンスが重要なベンチマークアプリケーションでラッパーを使用する必要がありますか? –

    +0

    データを別のプロセスに効果的に渡して、それが返るのを待っているので、すべてのラッパーは「パフォーマンス・ヒット」です。もしあなたが何らかの方法でより速く手渡しているなら、ヒットは利益によってバランスがとれているかもしれないということが、上手です!一例として、Goで書かれたHekadプロジェクトには、C正規表現ラッパーを実行するためのルアインタプリタが含まれています。これは、goのネイティブ正規表現ハンドラATMよりも高速です。 – odgrim

    1

    Which one should I use?

    あなたはbindings to ncursesを使用する必要があります。バインディングは、アプリケーションやライブラリなどの特定のバージョンで、元の言語とは異なる言語で使用することができます。頻繁な例には、Windowsマネージャ(gtk + = C、gtkmm = C++、Qt = C++、PyQt = Python、eccなど)があります。しかし、人々はしばしばバインディングを参照するためにラッパーやポートなどの他の単語を使用するので、混乱するのは簡単です。

    関連する問題