2011-12-25 10 views
21

En contexto de portabilidad de software, ¿cuál es la diferencia entre estos tres conceptos?¿Cuál es la diferencia entre un contenedor, enlaces y un puerto?

Así que, por ejemplo, quiero usar la biblioteca ncurses, la biblioteca ncurses original está escrita en C, pero mi aplicación está escrita en C++, luego encontré "ncurses wrapper", "bindings to ncurses" y " ncurses port ". ¿Cuál debería usar?

¿Cuáles son los pros y los contras de cada uno?

+0

Es imposible saber de lo que estás hablando a menos que proporciones más contexto. –

Respuesta

36

A wrapper es un código que se encuentra sobre otro código para reciclar su funcionalidad pero con una interfaz diferente. Esto generalmente implica una interfaz escrita en el mismo idioma. También debe tenerse en cuenta que a veces las personas dicen wrapper cuando lo que técnicamente significa es un enlace (yo incluido).

Pros:

  • Está en el mismo idioma que los originales
  • envolturas mejorar o reutilizar la funcionalidad sin necesidad de una reescritura completa.
  • Relativamente rápido de lograr
  • Actualizaciones triviales cuando la biblioteca de origen cambia. Probablemente solo necesite vincular nuevas funciones a menos que rompan la compatibilidad hacia atrás al cambiar las entradas/salidas esperadas de funciones/clases.

Contras:

  • embalaje toda una biblioteca pueden ser extremadamente repetitivo

Un binding es otro pedazo de código que se sienta encima de otro código para reciclar su funcionalidad excepto que esta vez fijaciones están escritos en un idioma diferente al que ellos atan. Un ejemplo notable es PyQt, que es el enlace de pitón para QT.

Pros:

  • Llevar funcionalidad de otro idioma en el idioma de su elección.
  • Relativamente rápido en comparación con un puerto
  • Se necesita el mismo nivel de cambios triviales que en el ajuste: probablemente solo necesite ajustar nuevas funciones/clases a menos que se rompa la compatibilidad cambiando las entradas/salidas esperadas de las funciones/clases

Contras:

  • Así como repetitivo como un envoltorio
  • Probablemente esté teniendo una actuación bastante grande éxito, especialmente cualquier envoltorio que implica un lenguaje interpretado en cada extremo

Un Port es cuando traduces un código para trabajar en un entorno diferente. Las analogías comunes incluyen juegos que salen para decir ... Xbox y luego se lanzan para PS3.

Pros:

  • le da la oportunidad de hacer mejoras en la base de código como se ve insuficiencias
  • Vas a estar íntimamente familiarizado con la forma en que el código se ejecuta, no sólo lo que hace.

Contras:

  • Con mucho, la solución más extensa en términos de tiempo/requiere una reescritura completa
  • usted necesita para asegurarse de que todo lo que la funcionalidad de las necesidades de la biblioteca fuente en un lenguaje está disponible en su idioma del puerto de destino o terminará envolviendo la funcionalidad necesaria (y potencialmente frustrando el propósito).
  • Cada vez que se actualiza la biblioteca de origen, también debe actualizar traduciendo los cambios que realizaron o arriesgarse a quedarse atrás.
+0

¡Gran explicación! – jweyrich

+0

¿El contenedor tiene un rendimiento significativo? ¿Debo usar wrapper en una aplicación de referencia donde el rendimiento es importante? –

+0

Cada contenedor es un "golpe de rendimiento" porque está entregando efectivamente datos a otro proceso y esperando a que vuelva. ¡Lo bueno es que si se entrega a algo mucho más rápido, el golpe puede compensarse con las ganancias! Un ejemplo que se me viene a la mente es que el proyecto Hekad escrito in go incluye un intérprete lua para ejecutar un contenedor C regex .... que es más rápido que el cajero automático de manejo de expresiones regulares nativo de go. – odgrim

1

Which one should I use?

Debe utilizar bindings to ncurses. Un enlace es una versión particular de una aplicación, biblioteca, etc. que difiere del original solo porque puede usarlo con otro idioma. Los ejemplos frecuentes incluyen administradores de ventanas (gtk + = C, gtkmm = C++; Qt = C++, PyQt = Python; ecc.). Sin embargo, las personas a menudo usan otras palabras como envoltura o puerto para referirse a enlaces, por lo que es fácil confundirse.

Cuestiones relacionadas