Solía pensar que la metaprogramación implicaba modificar el programa, y (al igual que algunas respuestas al What is reflection and why is it useful?) que la reflexión consistía meramente en la introspección de un programa. Sin embargo, la etiqueta de reflexión wiki dice¿La metaprogramación es un subconjunto de la reflexión?
reflexión es el proceso por el cual un programa puede observar y modificar su propia estructura y el comportamiento en tiempo de ejecución.
La reflexión es el proceso mediante el cual un programa puede realizar una introspección de . Esta introspección generalmente implica la capacidad de observar y modificar su propia estructura y comportamiento en tiempo de ejecución. Desde , la reflexión de la perspectiva teórica se refiere al hecho de que las instrucciones del programa se almacenan como datos. La distinción entre el código de programa y los datos es una cuestión de cómo se trata la información. Por lo tanto, los programas pueden tratar sus propios códigos como datos y observar o modificarlos.
[énfasis añadido]
Y la descripción de metaprogramming es
Metaprogramación está escribiendo programas que escriben o manipulan otros programas como sus datos.
La metaprogramación es útil porque puede ahorrar a los programadores valioso tiempo . Algunos lenguajes tienen soporte para metaprogramarse y este permite crear código con gran poder expresivo.
(supongo que "escribir" no significa que la escritura de código fuente a un archivo, ya que eso sería la generación de código.)
haría esto metaprogramming simplemente un subconjunto de reflexión?
¿O son los términos distintos porque algunos lenguajes de programación son metaprogramados por otro idioma, en cuyo caso ocurre metaprogramación pero no reflexión? (Hubo una sola oración sin cita que afirma esto en el metaprogramming Wikipedia article)
¿O los términos "reflexión" y "metaprogramación" se usan de manera diferente dependiendo de qué lenguaje de programación está usando la persona?