Pregunta

El impulso está destinado a ser el Biblioteca C++ estándar no estándar que todos los usuarios de C++ pueden usar.¿Es razonable suponer que está disponible para un proyecto C++ de código abierto o es una dependencia demasiado grande?

¿Fue útil?

Solución

Básicamente, su pregunta se reduce a "¿es razonable tener [la biblioteca gratuita xyz] como dependencia para un proyecto de código abierto de C++?".

Ahora considere la siguiente cita de Stroustrup y la respuesta es realmente obvia:

Sin una buena biblioteca, las tareas más interesantes son difíciles de hacer en C ++;pero con una buena biblioteca, casi cualquier tarea puede resultar fácil

Suponiendo que esto es correcto (y en mi experiencia, lo es), entonces escriba un proyecto C++ de tamaño razonable sin dependencias es francamente irrazonable.

Desarrollando más este argumento, el uno La dependencia de C++ (aparte de las bibliotecas del sistema) que razonablemente se puede esperar en un sistema cliente (de desarrollador) son las bibliotecas Boost.I saber que no lo son, pero no es una presunción irrazonable para un software.

Si un software ni siquiera puede confiar en Boost, no puede confiar en cualquier biblioteca.

Otros consejos

Echa un vistazo a http://www.boost.org/doc/tools.html.Específicamente el bcp La utilidad sería útil si desea integrar sus dependencias de impulso en su proyecto.Un extracto del sitio web:

"La utilidad bcp es una herramienta para extraer subconjuntos de Boost, es útil para los autores de Boost que desean distribuir su biblioteca por separado de Boost y para los usuarios de Boost que desean distribuir un subconjunto de Boost con su aplicación.

bcp también puede informar sobre qué partes de Boost depende su código y qué licencias utilizan esas dependencias".

Por supuesto, esto podría tener algunos inconvenientes, pero al menos deberías ser consciente de la posibilidad de hacerlo.

Solía ​​​​ser extremadamente cauteloso al introducir dependencias en los sistemas, pero ahora descubro que las dependencias no son gran cosa.Los sistemas operativos modernos vienen con administradores de paquetes que a menudo pueden resolver dependencias automáticamente o, al menos, facilitar a los administradores la instalación de lo que necesitan.Por ejemplo, Boost está disponible en Gentoo-Postage como dev-libs/boost y en los puertos de FreeBSD como devel/boost.

El software moderno de código abierto se basa en gran medida en otros sistemas.en un estudio reciente, al rastrear las dependencias de los paquetes de FreeBSD, establecimos que los 12,357 paquetes de ports en nuestro sistema FreeBSD 4.11 tenían en total 21,135 dependencias de biblioteca;es decir, necesitaban una biblioteca, además de las 52 bibliotecas que forman parte del sistema base, para poder compilar.Las dependencias de la biblioteca comprendían 688 bibliotecas diferentes, mientras que el número de bibliotecas externas diferentes utilizadas por un solo proyecto variaba entre 1 y 38, con un valor de moda de 2.Además, 5.117 proyectos utilizaron al menos una biblioteca externa y 405 proyectos utilizaron 10 o más.

Al final la respuesta a tu pregunta vendrá de un análisis coste versus beneficio.¿El beneficio de reutilizar una biblioteca madura, ampliamente utilizada, revisada y probada como Boost es mayor que el costo bajo y decreciente de una dependencia?Para cualquier uso no trivial de las instalaciones de Boost, la respuesta es que debes seguir adelante y usar Boost.

Eso depende.Si está utilizando una plantilla de clase definida solo para un archivo de encabezado en Boost, entonces sí, continúe y úsela porque no absorbe ninguna biblioteca compartida de Boost, ya que todo el código se genera en tiempo de compilación sin dependencias externas.Los problemas de versiones son una molestia para cualquier biblioteca compartida de C++, y Boost no es inmune a esto, por lo que si puedes evitar el problema por completo, es algo bueno.

KDE también depende de Boost.

Sin embargo, depende principalmente de tus objetivos, y más aún de tu público objetivo, más que del alcance de tu proyecto.por ejemplo, TinyJSON (proyecto muy pequeño), es casi 100% Boost, pero está bien porque la API que proporciona es similar a Boost y está dirigida a programadores de Boost que necesitan enlaces JSON.Sin embargo, muchas otras bibliotecas JSON no utilizan Boost porque están dirigidas a otras audiencias.

Por otro lado, no puedo usar Boost en el trabajo y sé que muchos otros desarrolladores (en sus trabajos diarios) están en el mismo barco.Así que supongo que podrías decir que si tu objetivo es OpenSource y un grupo que usa Boost, adelante.Si su objetivo es una empresa, es posible que desee pensarlo detenidamente y copiar y pegar solo las partes necesarias de Boost (y comprometerse con su soporte) para que su proyecto funcione.

  • Editar: La razón por la que no podemos usarlo en el trabajo es porque nuestro software debe ser portátil a aproximadamente 7 plataformas diferentes y en 4 compiladores.Por lo tanto, no podemos usar Boost porque no se ha demostrado que sea compatible con todos nuestros objetivos, por lo que la razón es técnica.(Estamos bien con la parte de la licencia OpenSource y Boost, ya que usamos Boost para otras cosas a veces)

Los beneficios de utilizar boost al escribir código C++ superan significativamente la complejidad adicional de distribuir el código fuente abierto.

Yo trabajo en Bloc de notas del programador y el código depende de boost para pruebas, punteros inteligentes e integración de Python.Ha habido un par de quejas debido al requisito, pero la mayoría seguirá adelante si quiere trabajar en el código.Tomar el impulso de dependencia fue una decisión de la que nunca me arrepentí.

Para que la complejidad sea un poco menor para los demás, incluyo bibliotecas prediseñadas con versiones para boost python, de modo que todo lo que necesitan hacer es proporcionar impulso en sus directorios de inclusión.

Yo diría que sí.Ambos Mandrivá (sombrero rojo basado) y Ubuntu (Debian based) tienen paquetes para las bibliotecas Boost.

Creo que la amplia funcionalidad que proporciona Boost y, como usted dice, es la biblioteca estándar no estándar de C++ lo justifica como una dependencia.

Desafortunadamente, sí, para ubuntu están disponibles, pero para RHEL 4 y 5 casi siempre terminé haciéndolos a partir de archivos comprimidos.Son bibliotecas geniales, realmente grandes...como usar una púa de riel cuando a veces todo lo que realmente necesitas es una chincheta.

Todo depende de la forma en que vayas a utilizar Boost.Como dijo Diomidis, si vas a utilizar algunas funciones no triviales de Boost, adelante.Usar bibliotecas no es un delito.

Por supuesto, hay muchas personas que prefieren no usar Boost, porque introducir nuevas dependencias siempre tiene algunas desventajas y preocupaciones extra, pero en un proyecto de código abierto...en mi opinión, incluso está bien usarlos si sólo quieres aprenderlos o mejorar tus habilidades con ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top