包装器,绑定和端口有什么区别?

时间:2011-12-25 05:15:38

标签: binding port wrapper portability

在软件可移植性环境中,这三个概念有什么区别?

所以例如,我想使用ncurses库,原始的ncurses库是用C语言编写的,但我的应用程序是用C ++编写的,然后我找到了“ncurses wrapper”,“绑定到ncurses”和“ncurses”港口”。我应该使用哪一个?

每个人的利弊是什么?

2 个答案:

答案 0 :(得分:44)

wrapper是一些代码,它位于其他代码之上,以回收它的功能但具有不同的接口。这通常意味着使用相同语言编写的接口。还应该注意的是,当技术上意味着它具有约束力时(包括我自己),人们有时会说包装纸。

优点:

  • 它与原始语言相同。
  • Wrappers增强或重用功能,无需完全重写。
  • 相对快速完成
  • 源库更改时的简单更新。您可能只需要绑定新函数,除非它们通过更改函数/类的预期输入/输出来破坏向后兼容性。

缺点:

  • 包装整个库可能非常重复

binding是另一段代码,它位于其他代码之上以回收它的功能,除了这个时间绑定是用不同于它们绑定的东西的语言编写的。一个值得注意的例子是PyQt,它是QT的python绑定。

优点:

  • 将其他语言的功能转换为您选择的语言。
  • 与端口相比速度相对较快
  • 在包装中需要相同级别的微不足道的更改 - 您可能只需要包装新的函数/类,除非它们通过更改函数/类的预期输入/输出来破坏向后兼容性。

缺点:

  • 和包装一样重复
  • 你可能会受到相当大的性能影响,尤其是任何一端涉及解释性语言的包装器

当您翻译某些代码以在其他环境中工作时,Port就是这样。常见的比喻包括说出来的游戏...... XBox,后来发布给PS3。

优点:

  • 让您有机会在看到不足之处时对代码库进行改进
  • 您将非常熟悉代码如何运行,而不仅仅是它的功能。

缺点:

  • 到目前为止,最长的解决方案就时间而言需要完全重写
  • 您需要确保源语言库中所需的任何功能都以您的目标端口语言提供,否则您将最终包装所需的功能(并可能会破坏目的。)
  • 每次源库更新时,您都必须通过翻译他们所做的任何更改或冒着落后的风险进行更新。

答案 1 :(得分:1)

Which one should I use?

您应该使用bindings to ncurses。绑定是应用程序,库等的特定版本,它与原始版本不同,因为您可以将它与其他语言一起使用。常见的例子包括Windows管理器(gtk + = C,gtkmm = C ++; Qt = C ++,PyQt = Python; ecc。)。但是,人们经常使用包装器或端口等其他词来引用绑定,因此很容易让自己感到困惑。