La metaprogramación es el proceso de escribir programas de computadora que, a su vez, escriben otros programas. El proceso de metaprogramación permite una mayor flexibilidad a los programadores de computadoras porque el trabajo que normalmente se realiza durante el período de ejecución se asigna al período de tiempo de compilación. Este proceso libera el tiempo del programador para concentrarse en otras tareas porque reduce el tiempo que lleva escribir manualmente el código de un programa. La recompilación es innecesaria porque la metaprogramación permite a los programas abordar nuevas situaciones con mayor eficiencia. “Metalenguaje” es el término que se le da al lenguaje informático que utiliza el metaprograma.
El lenguaje de objetos es el lenguaje informático de los programas que se escriben mediante el proceso de metaprogramación. La reflexividad es un término que se le da al metalenguaje, que también puede provocar la metaprogramación. La metaprogramación funciona de varias formas. Una forma es que la interfaz de programación de la aplicación permita que el código de programación acceda al interior del motor de ejecución.
Otra forma en que funciona la metaprogramación es permitiendo que los programas escriban otros programas a través del proceso de ejecución dinámica. En este caso, las expresiones de cadena se utilizan en este proceso. Aunque se puede utilizar el mismo lenguaje en estos dos procesos, no es inusual que los lenguajes favorezcan un proceso sobre el otro.
La metaprogramación también funciona eludiendo el lenguaje. Permite la alteración de lenguajes mediante sistemas de transformación de programas. Este procedimiento le da a la metaprogramación la libertad de usar lenguajes incluso si el lenguaje no emplea ninguna característica de metaprogramación.
No se necesita un código fuente para la metaprogramación. Puede realizarse mediante una compilación incremental o mediante programas modificables en tiempo de ejecución. El lenguaje informático Lisp es el lenguaje preferido para el proceso de metaprogramación. Esto se debe a la simplicidad de este tipo de lenguaje informático, así como a su potencia.
La metaprogramación que utiliza el lenguaje Lisp funciona al permitir la evaluación del código durante el período de tiempo de definición del programa, en contraste con el período de tiempo de ejecución. Este proceso hace que el lenguaje de metaprogramación y el lenguaje de programación del host sean iguales. Cuando esto ocurre, estas rutinas Lisp se pueden reciclar para el proceso de metaprogramación.
Otros lenguajes han utilizado este proceso exacto con la integración de un intérprete de programas. Este intérprete trabaja con los datos del programa. Los lenguajes de programación específicos de dominio en metaprogramación son otra forma que crea analizadores sintácticos y léxicos. Estos permiten al usuario utilizar expresiones regulares para definir el idioma.