2009-09-17 10 views
6

duplicados posibles
Is there a reason to not use Boost?
What are the advantages of using the C++ BOOST libraries?Boost promoción - ayuda necesaria

bien, la cuestión de alto nivel es "Por favor me proporcione lo que considera que son los argumentos más eficaces de por qué Boost completo, o algunas partes específicas del mismo, deben compilarse en el sistema de nuestra compañía y aprobarse en estándares de ingeniería de software ".

Los detalles de lo que necesito:

  • Aceptaría con gusto ambos argumentos positivos (por qué instalar), así como las réplicas de propuestas de posibles argumentos en contra que podría oír (véase el contexto de la pregunta a continuación). deben hacerse

  • Argumentos dirigido tanto a los miembros del equipo de Ingeniería de Software técnicas y/o muy gerentes de alto nivel técnico - en otras palabras, para estos últimos, los detalles del argumento pueden/deben ser de carácter técnico, pero el empuje de el argumento debería ser "cómo esto haría/ahorraría dinero a la compañía X frente a perder el dinero de la empresa Y como un costo de agregarlo a nuestro conjunto de herramientas".

contexto de la pregunta:

  • yo soy un desarrollador en una empresa con varios cientos de desarrolladores, muchos de los cuales dosens hacer C++.

  • Tuve la (mala) fortuna de ser reasignado de mi querido lugar de desarrollo de Perl a un equipo donde también estoy desarrollando C++. Hasta ahora he encontrado numerosas cosas que fácilmente podría haber hecho en Perl que son muy difíciles/engorrosas de hacer en C++ (foreach loop como ejemplo), y cada vez que toco una de estas, la respuesta del 50% es "Tu eres no puede hacer esto en C++ estándar, pero puede hacerlo con Boost "

  • Nuestro kit de herramientas incluye algunas bibliotecas RogeWave heredadas, y un número MUY limitado de bibliotecas Boost (por ejemplo, no regex, no foreach), de cosecha muy antigua.

  • Cualquier desarrollo debe usar bibliotecas compiladas y examinadas por el equipo de Ingeniería de Software. Esa es una regla difícil y rápida.

  • Equipo SE es algo resistente a agregar nuevas bibliotecas, por una variedad de razones (por ejemplo, esfuerzo para hacer esto; conflictos de funcionalidad con RogeWave, por ejemplo, para RegEx; el riesgo de instalar y usar cualquier software nuevo; costo de educación desarrolladores, etc ...). Agregarán las bibliotecas si se presentan con suficientes necesidades comerciales o argumentos de relación costo/beneficio sumamente convincentes, pero tienen un umbral bastante difícil.

lo tanto, estoy buscando ejemplos de qué partes de Boost son tan maravillosa (con coste exacto/estimaciones de beneficios) que la instalación de ellos sería una Obviamente vale la pena Esfuerzo de Ingeniería de Software.

Gracias de antemano por cualquier idea/sugerencia/ejemplos.

Por favor, no marque esta cuestión tan subjetiva como estoy en busca de respuestas medibles, no sólo sentimientos maravillosos :)

Respuesta

15

Dondequiera que trabajé en la última década, cuando tenían su propia clase de puntero inteligente, encontré errores en eso, generalmente en unas pocas semanas. Y, no, nunca fui y lo miré con la esperanza de encontrar errores.

llegué en el hábito de la publicación de la siguiente cita de la TR1 smart pointer proposal:

Los desarrolladores Boost encontraron un puntero inteligente propiedad compartida muy difícil de implementar correctamente. Otros han hecho la misma observación. Por ejemplo, Scott Meyers [Meyers01] dice:

"El STL en sí no contiene ninguna referencia a contar puntero inteligente, y escribir una buena - uno que funcione correctamente todo el tiempo - es bastante complicado que no lo hace quiero hacerlo a menos que sea necesario. Publiqué el código para un puntero inteligente de recuento de referencias en C++ más efectivo en 1996, ya pesar de basarlo en implementaciones de punteros inteligentes establecidas y enviarlo a una extensa revisión previa a la publicación por parte de desarrolladores experimentados, un pequeño desfile de informes de errores válidos se ha filtrado durante años.El número de maneras sutiles en que los punteros inteligentes de conteo de referencias puede fallar es notable."

Esto además de un análisis detallado del fallo (s) que encontramos por lo general me dieron el trabajo de incorporar las librerias a impulsar en el código base. :)

7
  1. Es un estándar abierto, no controlado por una compañía específica (sin costes de licencia)
  2. Es plataforma cruzada
  3. Es expertamente diseñado/escrito y muy rápido/eficiente ampliamente probado
  4. Existen implementaciones de código abierto que su equipo puede compilar por sí mismo.
  5. Boost pronto se convertirá en parte del estándar STL C++

Aquí es un poco más viejas artículo de 2005 sobre el Dr. Dobbs discutir el novedoso estándar de C++ 0x.

http://www.ddj.com/cpp/184401958

+5

+1 - excepto que no todo Boost está siendo incorporado en el próximo estándar C++, pero Boost ciertamente tiene una influencia significativa en el nuevo estándar. –

+1

¿No es el último punto un punto * contra * impulso? ¿Por qué deberían pasar por todos los trámites de agregar una nueva biblioteca, si estará disponible como parte del estándar en unos pocos años? – jalf

+2

@jalf, si tienen que pasar por todo el papeleo para agregar una biblioteca, imagina cuánto trabajo tendrán que hacer para poder actualizar su lenguaje a C++ 0X (siempre que eso salga) – Glen

2

tuve que mantener un componente utilizando el viejo Tools.h vendimia ++ desde Roguewave, en un sistema Solaris.

En Solaris, si queremos usar boost, necesitamos usar gcc o SunStudio con la implementación de STLport del estándar (en lugar de Roguewave uno). Y como Tools.h ++ requiere la antigua implementación estándar de Roguewave del estándar, en Solaris, tuve que abandonar el impulso.

Al final reescribí una versión simplificada de algunas características de impulso que necesitaba.

Si te encuentras en esa misma situación (*), no podrías moverte de la biblioteca de Roguewave para aumentar eso fácilmente. Hay un costo no despreciable en esta operación, ya que los contenedores de puntero de ambas bibliotecas tienen interfaces bastante diferentes.

(*) Donde no podemos cambiar lentamente bits por bits del código anterior para usar progresivamente el impulso. En esa situación, la migración tiene que ser radical y cambiar simultáneamente cada aparición de Tools.h ++ por algo más de moda, o incluso mejor.

NB: la mayoría de las personas pueden usar progresivamente el impulso en proyectos antiguos, y pueden perder un punto muy importante, y sí técnico. De ahí mi respuesta negativa.

2

Boost es una gran herramienta y una parte invaluable de nuestro desarrollo de productos (nos perderíamos sin smart_ptr) ... pero debido a que está cambiando tan rápido, la estabilidad de las liberaciones se puede efectuar

Por ejemplo, estábamos felizmente presentando nuevas versiones de Boost tan pronto como llegaron sin pensar dos veces. Eso es hasta que nos picamos con un error en la biblioteca de subprocesamiento 1.35 que producía errores ocasionales (es decir, difíciles de depurar) pero críticos. Afortunadamente, identificamos el problema antes de que se publicara algo y volvimos a 1.34.

Desde entonces, hemos tomado una versión específica, la hemos probado exhaustivamente y no la hemos actualizado sin una razón convincente para hacerlo.

+0

Sí. Eso es contra lo que me enfrento: (es bastante correcto para nuestra empresa) No repararlo si no se rompió la filosofía de desarrollo. Lo cual es ideal para desarrollar código estable, pero requiere un doble esfuerzo para introducir algo nuevo y emocionante cuando lo nuevo lo vale. – DVK

10

Me parece que lo estás haciendo mal. Dado que las propuestas para agregar nuevas bibliotecas se encontrarán con mucha resistencia, no se moleste en intentar argumentar a favor de la mejora como un todo. Elige tus batallas en su lugar.

Busque las bibliotecas específicas de Boost que usted saber (con su conocimiento de la aplicación en la que se utilizará) será útil y ahorrará tiempo y dinero. Y luego proponga agregar esos.

Podría enumerar fácilmente las bibliotecas de Boost que he encontrado útiles, y por qué creo que son geniales, pero no sé si serán de cualquier uso de en su aplicación.

Presione para que se incluyan las bibliotecas de impulso individuales, y tal vez, con el tiempo, se incluirán tantas de ellas que será más sencillo que todos incluyan todo Boost.

+0

Esa sería la ruta probable que tendría que tomar. El problema es que si bien la cantidad de apoyo necesario para una biblioteca de impulso específico es menor que todo el grupo, aún debe ser igual de convincente y detallada en el nivel de costo/beneficio. Y no tengo suficiente experiencia en C++ para hacer esos argumentos yo mismo (soy un 95% Perl en este momento hábil) – DVK

+2

Bastante, pero el problema es que el resto de nosotros no sabemos realmente qué impulso bibliotecas sería relevante en su aplicación. La mayoría de las personas considera que los punteros inteligentes son muy valiosos, y tiendo a usar type_traits mucho, pero después de eso, es realmente específico de dominio qué bibliotecas son relevantes. – jalf

1

Aquí hay dos sugerencias para abogar impulso:

quién está usando Boost? (http://www.boost.org/users/uses.html)

un montón de grandes proyectos utilice el refuerzo: (por ejemplo, Adobe Photoshop, CERN)

Costo del Proyecto Impulso (http://www.boost.org/development/index.html)

¿Cuánto le costaría contratar a un equipo para escribir impulso desde cero? Hay una calculadora ingeniosa (algo artificial) que ayuda a ponerla en perspectiva.

Cuestiones relacionadas