В чем разница между оберткой, привязками и портом? - PullRequest
26 голосов
/ 25 декабря 2011

В чем разница между этими тремя понятиями в контексте переносимости программного обеспечения?

Так, например, я хочу использовать библиотеку ncurses, оригинальная библиотека ncurses написана на C, но мое приложение написано на C ++, затем я нашел «обертку ncurses», «привязки к ncurses» и «ncurses». порт». Какой из них я должен использовать?

Каковы плюсы и минусы каждого из них?

Ответы [ 2 ]

47 голосов
/ 25 декабря 2011

A wrapper - это фрагмент кода, который располагается поверх другого кода, чтобы перерабатывать его функциональность, но с другим интерфейсом. Обычно это подразумевает интерфейс, написанный на том же языке. Следует также отметить, что иногда люди говорят «обертка», если они имеют в виду техническую привязку (включая меня).

Плюсы:

  • На том же языке, что и оригинал
  • Оболочки улучшают или повторно используют функциональность, не требуя полного переписывания.
  • Относительно быстро выполнить
  • Тривиальные обновления при изменении исходной библиотеки. Вероятно, вам нужно будет только связывать новые функции, если они не нарушают обратную совместимость, изменяя ожидаемый ввод / вывод функций / классов.

Минусы:

  • Упаковка всей библиотеки может быть чрезвычайно повторяющейся

A привязка - это еще один фрагмент кода, который располагается поверх другого кода для переработки его функциональности, за исключением того, что на этот раз привязки пишутся на языке, отличном от того, что они связывают. Ярким примером является PyQt, который является связыванием Python для QT.

Плюсы:

  • Перенос функциональности с другого языка на язык по вашему выбору.
  • Относительно быстро по сравнению с портом
  • Необходим тот же уровень тривиальных изменений, что и при переносе. Вам, вероятно, понадобится обернуть только новые функции / классы, если они не нарушают обратную совместимость, изменяя ожидаемый ввод / вывод функций / классов.

Минусы:

  • Так же, как и обертка
  • Вероятно, вы получаете довольно большой удар по производительности, особенно любую оболочку с интерпретируемым языком с обеих сторон

A Порт - это когда вы переводите некоторый код для работы в другой среде. Общие аналогии включают в себя игры, которые говорят, скажем ... XBox, а затем выпущены для PS3.

Плюсы:

  • Дает вам возможность вносить улучшения в кодовую базу, когда вы видите недостатки
  • Вы будете хорошо знакомы с тем, КАК работает код, а не только с тем, что он делает.

Минусы:

  • На сегодняшний день самое длинное решение с точки зрения времени / требует полного переписывания
  • Вы должны убедиться, что любая функциональность, необходимая исходной библиотеке на языке, доступна на вашем целевом языке порта, или вы в конечном итоге оберните необходимые функции (и, возможно, победите цель).
  • Каждый раз, когда обновляется исходная библиотека, вы также должны обновлять ее, переводя любые внесенные изменения или рискуя отстать.
1 голос
/ 28 декабря 2011

Which one should I use?

Вы должны использовать bindings to ncurses.Привязка - это конкретная версия приложения, библиотеки и т. Д., Которая отличается от оригинала только тем, что вы можете использовать ее с другим языком.Частые примеры включают менеджеры окон (gtk + = C, gtkmm = C ++; Qt = C ++, PyQt = Python; ecc.).Однако люди часто используют другие слова, такие как обертка или порт, для обозначения привязок, поэтому легко запутаться.

...