Realizo programación en un entorno académico en este momento, por lo que puedo usar lo que quiera. Estoy usando la biblioteca de gráficos de impulso para algunas cosas, y me pregunto si vale la pena invertir el esfuerzo en comprender GP más profundamente.
Tengo curiosidad: ¿se usa mucho la programación genérica (GP) en la industria? Supongo que la mayoría de los programadores se sienten mucho más cómodos con OOP o están utilizando lenguajes que no enfatizan o no admiten GP, por lo que fuera de llamar a estructuras / funciones de datos STL en C ++, mi impresión es que GP no se usa con tanta frecuencia en la práctica. Pero, al estar fuera de la industria en este momento, sería bueno saber de los practicantes sobre esto.
(¡mientras escribo esto, veo que la programación genérica ni siquiera es una etiqueta válida!)
Respuestas:
Depende mucho del contexto del equipo y del proyecto.
Por ejemplo, en los videojuegos, a menudo el código es el "más simple" posible (e incluso a veces demasiado simple) pero en grandes arquitecturas. Esto se debe a que los desarrolladores de juegos tienen muchos problemas que solucionar y no quieren molestarse con la meta programación (que es un lenguaje separado muy abstracto y difícil de entender dentro de C ++).
Al mismo tiempo, el uso básico de plantillas es común incluso en esas tiendas y puede ver algunas optimizaciones basadas en plantillas en algunas funciones muy específicas de algunos motores.
Pero en el desarrollo del juego, la mayoría de las personas simplemente evitarán cualquier metaprogramación.
Ahora, en el otro extremo, algunas aplicaciones de procesamiento realmente complejas o pesadas, que no son comunes, requieren algún tipo de metaprogramación pesada debido a los requisitos de rendimiento y flexibilidad (en tiempo de compilación) que no son comunes. Estoy trabajando en uno ahora mismo.
No es común, pero existe y algunos dominios de nicho (en algunos contextos incrustados de números o científicos) requieren que las personas sepan mucho sobre metaprogramación o deseen aprender.
En el medio, la mayoría de las personas usarán la metaprogramación como "cliente", no como "diseñador". La mayoría de los códigos de metaprogramación están agrupados en bibliotecas porque las bibliotecas son herramientas para el código y ¿qué es mejor que una biblioteca que pueda adaptarse a los tipos personalizados con los que ha estado trabajando hasta ahora?
Boost (http://boost.org) es un conjunto de bibliotecas, algunas de magia negra de metaprogramación pesada, y se utilizan en muchas tiendas de C ++ como "STL ++", una extensión de STL (y lo es). No todas las tiendas lo usan por varias razones, como la compatibilidad del compilador (algunas bibliotecas de impulso pueden hacer que su compilador pida perdón por cada vez que hirió sus sentimientos ...) y más a menudo porque a algunos desarrolladores no les gusta no poder entender cómo funciona una herramienta en su interior (intente comprender Boost.Spirit ...)
Independientemente de las empresas para las que trabaje, algunas utilizarán este paradigma, otras lo harán menos o nada o incluso las prohibirán.
No hay consenso porque nadie tiene las mismas necesidades, contexto o equipo.
Pero aún así, obviamente, se usa. Tal vez pregunte quién usa boost en su lista de correo para tener más ejemplos del mundo real.
fuente
La programación genérica, académicamente llamada polimorfismo paramétrico , se usa muy a menudo en los campos. En mi empresa, lo usamos principalmente para construir editores independientes de tipo para datos, independientemente de su tipo. Simplemente no lo necesita con tanta frecuencia como otras funciones, pero definitivamente es una función que no me gustaría perder. Lo usa cuando un comportamiento se ajusta a una gran cantidad de tipos. Es una señal clara de que necesita genéricos cuando se encuentra escribiendo el mismo código varias veces para diferentes tipos.
Al menos desde mi experiencia, su punto de vista es incorrecto. OOP y la programación genérica no son mutuamente excluyentes. De hecho, debes usar los efectos de sinergia de combinarlos. Como dije antes, la razón por la que no lo ves aparecer con tanta frecuencia como otras técnicas es porque no lo necesitas con tanta frecuencia. Pero es una característica fuerte y te ayuda mucho a mantener tu código SECO . ¿Qué lenguajes realmente no enfatizan el soporte de GP en la programación de alto nivel? 3 de los 5 idiomas de Tiobe Top 5 admiten genéricos / plantillas. Y PHP se escribe dinámicamente, por lo que realmente no los necesita. ¿Y qué?
fuente
Las plantillas de C ++ se usan ampliamente para cosas diferentes a los contenedores, al menos en mi dominio del problema (finanzas cuantitativas). Incluso me aventuraría a decir que a veces se usa con demasiada frecuencia, para fines en los que las funciones virtuales antiguas serían suficientes (y no aumentarían tanto el tiempo de compilación).
La gente lo usa para evitar la duplicación de código y lograr el polimorfismo en tiempo de compilación (sin envío virtual).
fuente