Dos ejemplos de bibliotecas que usan construcciones modernas de C ++:
- Tanto las bibliotecas eigen como el armadillo (álgebra lineal) usan varias construcciones modernas de C ++. Por ejemplo, usan ambas plantillas de expresión para simplificar las expresiones aritméticas y a veces pueden eliminar algunos temporales:
http://eigen.tuxfamily.org
http://arma.sourceforge.net/
http://hpac.rwth-aachen.de/teaching/sem-accg-14/Armadillo.pdf (presentación sobre plantillas de expresión en Armadillo)
- La biblioteca CGAL (geometría computacional) utiliza muchas características modernas de C ++ (utiliza en gran medida plantillas y especializaciones):
http://www.cgal.org
Nota:
Las construcciones modernas de C ++ son muy elegantes y pueden ser muy divertidas de usar. Es tanto un punto fuerte como una debilidad: cuando se usan, es tan tentador agregar varias capas de plantillas / especializaciones / lambdas que al final a veces se obtiene más "administración" que código efectivo en el programa (en otras palabras, su programa "habla" más sobre el problema que describiendo la solución). Encontrar el equilibrio correcto es muy sutil. Conclusión: uno necesita rastrear la evolución de la relación "señal / ruido" en el código midiendo :
- ¿Cuántas líneas de código en el programa?
- ¿Cuántas clases / plantillas?
- tiempo de ejecución ?
- consumo de memoria?
Todo lo que aumenta los dos primeros puede considerarse como un costo (porque puede hacer que el programa sea más difícil de entender y mantener), todo lo que disminuye los dos últimos es una ganancia .
Por ejemplo, la introducción de una abstracción (una clase virtual o una plantilla) puede factorizar el código y hacer que el programa sea más simple ( ganancia ), pero si nunca se deriva / instancia una sola vez, entonces introduce un costo sin ganancia asociada (nuevamente es sutil porque la ganancia puede venir más adelante en la evolución futura del programa, por lo tanto, no existe una "regla de oro").
La comodidad del programador también es un factor importante a tener en cuenta en el balance de costo / ganancia: con demasiadas plantillas, el tiempo de compilación puede aumentar significativamente y los mensajes de error se vuelven difíciles de analizar.
Ver también
¿En qué medida la programación genérica y la metaprogramación usando plantillas C ++ son útiles en la ciencia computacional?