c++ - nestle - ¿Cuáles son los mejores componentes de Boost?
install boost ubuntu (12)
He estado navegando por la revisión 1.38.0 de las bibliotecas de Boost, en un intento de decidir si hay suficientes joyas para justificar la negociación del proceso de aprobación de software externo de mi empresa. En el curso de escribir programas de prueba y leer los documentos, he llegado a un par de conclusiones
- por supuesto, no todo en Boost alguna vez será de utilidad en mi grupo de ingeniería
- más importante aún, algunas de estas bibliotecas parecen más pulidas que otras
De hecho, algunas bibliotecas me parecen un poco juguetonas.
Hay una serie de bibliotecas bastante accesibles que puedo ver poner en uso después de un breve período de investigación, como boost :: variant (me gusta mucho el componente de visitante y el hecho de que el compilador barf si un visitante carece de un operador para uno de los tipos de variantes). Usaría boost :: shared_ptr, excepto por el hecho de que nuestro grupo ya tiene un conjunto de tipos de punteros inteligentes.
Por lo tanto, según la amplia experiencia de los usuarios de Stack Overflow, las bibliotecas de Boost
- tener alta calidad?
- son más que juguetes?
- ¿Hay alguna que tenga una barrera de entrada alta pero que vale la pena aprender?
Tenga en cuenta que esta es una pregunta algo diferente de la planteada en Boost considerada perjudicial?
PD: ¿Se ha eliminado una de las respuestas (de litb)? No puedo verlo aquí, y solo un extracto en mi página de usuario ...
A menudo uso boost::filesystem
. Hace todo lo necesario para una gestión de archivos simple
Boost :: lambda es de alguna ayuda si usa STL. Le permite crear predicados en su lugar, como este:
for_each(a.begin(), a.end(), std::cout << _1 << '' '');
Este código genera todos los elementos del contenedor separados por espacios.
Considero que el boost
es un elemento imprescindible no impugnado al diseñar aplicaciones multiproceso (por ejemplo, * nix y win32) de subprocesos múltiples ( boost::thread
, boost::interprocess
.) Esto solo ha sido justificación suficiente en al menos una instancia para adoptando boost
como parte de los proyectos de mis empleadores.
El resto (contenedores, programación genérica y meta-programación, memoria) seguido como regalos.
He encontrado boost.thread y boost.asio indispensable para escribir aplicaciones cliente / servidor. La biblioteca del puntero inteligente facilita la escritura de código que utiliza el manejo de excepciones sin pérdida de memoria.
En una nota lateral, recientemente se ha lanzado un conjunto de archivos PDF que documentan algunas de las bibliotecas de impulso más comunes. Puedes descargarlos desde SourceForge .
He leído las otras respuestas y necesito agregar Boost.Graph (BGL) y su amigo Boost.Property_map. Estos dos literalmente cambiaron mi trabajo diario.
Está muy bien diseñado, pero la mayoría de la gente se desanima al principio porque hay un precio bastante alto para pagar antes de comprender realmente el propósito de todos los conceptos. Pero una vez que controlas esta biblioteca, es difícil prescindir de ella.
Muchas de las adiciones a la biblioteca estándar de C ++ 0x se crearon primero como parte de las bibliotecas de Boost.
No son perfectos (es cualquier software), pero el proceso de ingeniería utilizado es bastante sólido (mucho más que la mayoría del software libre). Si necesita ayuda, encontrará muchos en la lista de correo.
No es exactamente la misma pregunta pero debería ayudar a responder la tuya: Las partes más utilizadas de Boost
Personalmente, creo que debería echar un vistazo a las bibliotecas que ocultan cosas específicas de la plataforma como el enhebrado, ipc, archivos mapeados en memoria, sistema de archivos, IO asíncrono, etc.
Esto puede ahorrarle mucho tiempo y problemas en proyectos multiplataforma y tiende a centrarse en la exposición de funcionalidades en lugar de ejercicios en funciones de lujo en C ++.
Si necesita analizar archivos de texto que son más complejos que simples pares clave / valor, recomiendo encarecidamente Boost::spirit . Tiene una gran curva de aprendizaje, pero una vez que lo resuelves, te permite incorporar fácilmente las gramoras EBNF directamente en el código. Es mucho más robusto que escribir tu propio analizador. También me encuentro creando formatos de archivo que están diseñados más para la facilidad del escritor del archivo que para el escritor del código de análisis.
Uso con bastante frecuencia (y hace mi vida más simple):
punteros inteligentes (
shared_ptr
,scoped_ptr
,weak_ptr
, interprocessunique_ptr
):-
scoped_ptr
para RAII básico (sin propiedad compartida y transferencia de propiedad), sin costo. -
shared_ptr
para operaciones más complejas: cuando se necesita propiedad compartida. Sin embargo, hay algún costo. -
unique_ptr
: hay un trabajo activo en impulsar unificar varios enfoques (presentes en Boost) aunique_ptr
con la emulación de movimiento. - Son realmente simples de usar (solo encabezado), fáciles de aprender y muy bien probados (bueno, excepto quizás el
unique_ptr
)
-
Boost Thread: biblioteca desarrollada activamente (los hilos son ahora móviles) para trabajar con hilos. Oculta la complejidad de la implementación de subprocesos en una plataforma determinada.
Boost MPL y Fusion: estos son más difíciles de explicar. Durante mucho tiempo no utilicé el tiempo de compilación, pero después de leer y aprender resultó que parte de mi código se puede simplificar. Aún así, ten cuidado con el tiempo de compilación ...
Boost Asio
- A diferencia de la primera impresión (al menos hace algún tiempo), no es solo la biblioteca de red. Proporciona un modelo de E / S asíncronas que se puede usar para prácticamente cualquier cosa.
Formato Boost (formato de salida potente, pero muy pesado)
Boost Spirit2x (Karma y Qi usaron ambos para analizar y generar resultados basados en una gramática dada). Realmente poderoso, puede crear un analizador sin recurrir a herramientas externas. Sin embargo, el tiempo de compilación podría ser un problema. También se está desarrollando activamente la versión 2x y la documentación es bastante escasa (la lista de correo espíritu-desarrollo es muy útil)
Boost Bind, Function y Lambda para hacer su vida más fácil y Boost Phoenix - solo para experimentar
lexical_cast (algo similar podría nacer pronto como boost :: string)
Regex / Xpressive - expresiones regulares
Escriba rasgos y verificaciones conceptuales, una vez más para hacer su vida más fácil
Mates:
- varios generadores de números aleatorios
- varias distribuciones estadísticas
- ublas - para usar enlaces LAPACK / BLAS en C ++ de la misma manera
- algunas funciones matemáticas, normalmente no disponibles en C ++
- algunas herramientas para controlar las conversiones entre tipos numreric
- aritmética de intervalo
Boost Iterator (adaptadores especializados para iteradores y fachada para crear el suyo propio)
Marco de prueba de la unidad Boost
Y aún hay algunas partes que apenas había tocado en Boost. Probablemente también olvidé mencionar algunos pocos obvios.
Recuerde usar las herramientas correctas (martillos) para problemas correctos (uñas). Recuerde mantener las soluciones simples. Recuerde sobre el costo de la funcionalidad recibida (por ejemplo, overhead de tiempo de ejecución de shared_ptr
o boost::format
o costos de tiempo de compilación de MPL / Fusion / Spirit / Phoenix y tamaños de ejecutables). Pero experimenta y aprende, es donde está la diversión.
Y cuando se trata de convencer a la administración para usar las nuevas bibliotecas, no tiene que comenzar con todas las bibliotecas. Comience con las cosas simples (probablemente las que tienen un historial de Boost largo y estable, amplia compatibilidad con el compilador, están planificadas para su inclusión en TR2 / C ++ 1x, etc.) y ejemplos sencillos que muestran los beneficios.
Yo diría que las valiosas bibliotecas son:
- Metaprogramación (MPL,
enable_if
,type/function_traits
) - Preprocesador: si lo necesita, puede ser útil
- variante, opcional - como ya anotó
- Matemáticas: cuaterniones, funciones matemáticas adicionales (aunque pueden no serle útiles)
- lambda: aunque la sintaxis es peluda, es bastante adictiva
- operadores / iteradores: son realmente útiles al construir sus propios tipos
Tal vez Python (nunca lo intenté, pero algunos programas de KDE lo usan)
Boost interprocess definitivamente vale la pena si estás haciendo cosas con memoria compartida y cosas por el estilo.