Ответ 1
A wrapper - это немного кода, который находится поверх другого кода, чтобы перерабатывать его функциональность, но с другим интерфейсом. Это обычно подразумевает интерфейс, написанный на том же языке. Следует также отметить, что иногда люди скажут обертку, когда то, что они технически означают, является обязательным (включая меня).
Плюсы:
- Он на том же языке, что и оригинал
- Wrappers улучшают или повторно используют функциональные возможности без полной перезаписи.
- Относительно быстро выполнить
- Тривиальные обновления при изменении исходной библиотеки. Вероятно, вам нужно будет только привязать новые функции, если они не нарушат обратную совместимость, изменив ожидаемый ввод/вывод функций/классов.
Минусы:
- Обтекание всей библиотеки может быть чрезвычайно повторяющимся.
A binding - еще один бит кода, который находится поверх другого кода, чтобы перерабатывать его функциональность, за исключением того, что привязки времени записываются в язык, отличный от того, что они связывают. Примечательным примером является PyQt, который является связыванием python для QT.
Плюсы:
- Приведите функциональность с другого языка на язык по вашему выбору.
- Относительно быстро по сравнению с портом
- Необходим тот же уровень тривиальных изменений, что и при упаковке. Вероятно, вам нужно будет только обернуть новые функции/классы, если они не нарушат обратную совместимость, изменив ожидаемые входные/выходные функции/классы.
Минусы:
- Так же, как повторяющийся, как обертка
- Вероятно, вы получаете довольно большой удар производительности, особенно любую оболочку с интерпретируемым языком на любом конце
A Port - это когда вы переводите код для работы в другой среде. Общие аналогии включают игры, которые выходят, скажем... XBox и позже выпущены для PS3.
Плюсы:
- Предоставляет вам возможность улучшать базу кода, поскольку вы видите недостатки
- Вы будете хорошо знакомы с тем, как работает код, а не только тем, что он делает.
Минусы:
- На сегодняшний день самое длинное решение с точки зрения времени/требует полной перезаписи
- Вам нужно убедиться, что любая функциональность, необходимая исходной библиотеке на языке, доступна на вашем целевом порту, или вы в конечном итоге обернете необходимую функциональность (и потенциально можете победить цель.)
- Каждый раз, когда исходная библиотека обновляется, вы также должны обновлять, переводя любые изменения, которые они сделали или рискуют отстать.