¿Qué tan común es la metaprogramación? [cerrado]

10

¿Con qué frecuencia utiliza o ha visto metaprogramación en los proyectos? En uni, nunca he visto que esto se aplique, pero lo he visto en mi trabajo anterior (cuando lo vi me quedé impresionado de lo efectivo que era).

¿Pero qué tan común es? ¿Se usa todo el tiempo o solo ocasionalmente?

gablin
fuente
55
Puede que no sea tan común; aunque bastante común en Lisp, Lisp no es tan común, ni siquiera Common Lisp.
Paul
explícito o implícito? En un extremo, usar Java y C # es posiblemente metaprogramación ya que sus compiladores generan archivos de lenguaje que luego se compilan o interpretan. Por otro lado, casi nadie escribe código para generar código en un lenguaje para el que han creado un compilador.
Más
La metaprogramación es ubicua. Cualquier proyecto de código abierto que dependa de Autotools está utilizando metaprogramación. MOC en el mundo Qt, tblgen en LLVM, T4 en numerosos proyectos .NET, prácticamente cualquier proyecto web que genere JavaScript, etc.
SK-logic

Respuestas:

5

Si considera que la reflexión es una especie de metaprogramación, es relativamente común. Para algunas personas, incluso la programación genérica (plantillas y genéricos) es una forma de metaprogramación, por lo que es aún más común.

Sin embargo, en mi opinión, la metaprogramación es algo más complejo, que implica la generación de código real y, por lo tanto, bastante poco común, incluso en lenguajes de script.

Wizard79
fuente
¿Por qué la metaprogramación de plantillas no es una "generación de código real"? Las plantillas de C ++ son completas de Turing y puede generar código complejo arbitrario.
SK-logic
@ SK-logic: quiero decir que se genera un nuevo código a pedido en tiempo de ejecución. Las plantillas son procesadas por el compilador, puede verlas como un poderoso tipo de macro de precompilador.
Wizard79
¿Por qué querrías generar código en tiempo de ejecución? Las formas más poderosas de metaprogramación (como Common Lisp, Racket, Template Haskell, etc.) están en tiempo de compilación.
SK-logic
3

Creo que depende en gran medida del idioma que uses. La gente común de Lisp probablemente lo usa de manera justa: el Protocolo Meta-Objeto permite cosas claras, persistencia transparente / ortogonal, por ejemplo, y Smalltalkers lo usa con frecuencia.

Frank Shearar
fuente
2

Tiende a aparecer de manera común y consistente en los proyectos de Common Lisp. Echa un vistazo a OnLisp y Let Over Lambda para obtener alguna explicación / información.

Si solo busca ejemplos (y conoce CL), consulte el repositorio de Antiweb ; Hay una gran cantidad de metaprogramación que se desarrolla bajo las sábanas.

Inaimathi
fuente
1

Durante los últimos dos años, la primera parte de la programación en una nueva tarea casi siempre ha sido escribir código para escribir código. Hay un montón de repeticiones asociadas con las interacciones con una base de datos que pueden simplificarse hasta la generación automática de scripts. Piense en cosas donde necesita consultar 3 tablas para formar un objeto o algo así. ¿Por qué escribirlo usted mismo si hay 10 de estas cosas que podrían cambiar en el futuro?

Wheaties
fuente