ScholarGate
Asistente

Metaprogramación y Macros

La metaprogramación trata los programas como datos que otros programas pueden generar, inspeccionar o transformar, y las macros proporcionan una abstracción sintáctica controlada en tiempo de compilación.

Encontrar tema con PaperMindPróximamenteFind papers & topics
Tools & resources
Descargar diapositivas
Learn & explore
VídeoPróximamente

Definition

La metaprogramación es la escritura de programas que producen, analizan o transforman otros programas (o a sí mismos); las macros son una facilidad de metaprogramación que reescribe la sintaxis fuente en código expandido antes o durante la compilación.

Scope

Este tema abarca las técnicas mediante las cuales los programas manipulan programas: macros léxicas y sintácticas, expansión de macros higiénicas, generación de código en tiempo de compilación, programación multi-etapa, reflexión y sistemas de plantillas. Aborda cómo estos mecanismos extienden la sintaxis y las abstracciones de un lenguaje mientras preservan la corrección, especialmente con respecto a la captura y el enlace de variables.

Core questions

  • ¿Cómo puede la abstracción sintáctica extender un lenguaje sin una captura de nombres insegura?
  • ¿Qué distingue la metaprogramación en tiempo de compilación de la reflexión en tiempo de ejecución?
  • ¿Cómo separa la programación multi-etapa la generación de programas de la ejecución?
  • ¿Cuándo mejora la metaprogramación la abstracción en lugar de perjudicar la legibilidad y las herramientas?

Key theories

Expansión de macros higiénicas
Kohlbecker y sus colegas introdujeron las macros higiénicas, que renombran automáticamente las variables enlazadas durante la expansión para que el código generado por la macro no pueda capturar accidentalmente o ser capturado por nombres en el sitio de uso.
Programación multi-etapa
Taha y Sheard formalizaron la computación por etapas con anotaciones explícitas, proporcionando una descripción tipada de la generación y ejecución de código a través de distintas etapas de evaluación.
Metaprogramación de plantillas
Sheard y Peyton Jones agregaron metaprogramación tipada en tiempo de compilación a Haskell, permitiendo que los programas construyan y empalmen sintaxis abstracta en tiempo de compilación.

Clinical relevance

Las macros y la metaprogramación permiten a los autores de bibliotecas crear abstracciones específicas de dominio, eliminar código repetitivo y realizar especializaciones en tiempo de compilación para mejorar el rendimiento. La higiene y la disciplina de las etapas son lo que hace que estas potentes facilidades sean lo suficientemente seguras para el uso diario.

History

Las macros se remontan a los primeros Lisp y al ensamblador, pero las macros Lisp no higiénicas eran propensas a la captura accidental de variables. La expansión higiénica de Kohlbecker en 1986 resolvió esto, influyendo en las reglas de sintaxis de Scheme. El trabajo posterior formalizó la programación multi-etapa (MetaML) y llevó la metaprogramación tipada en tiempo de compilación a lenguajes como Haskell, Scala y Rust.

Debates

Poder versus comprensibilidad de las macros
Los diseñadores de lenguajes sopesan el poder expresivo de la abstracción sintáctica sin restricciones frente a la dificultad que crea para los lectores, depuradores y herramientas, lo que motiva la higiene y los sistemas de macros disciplinados.

Key figures

  • Eugene Kohlbecker
  • Matthias Felleisen
  • Walid Taha
  • Tim Sheard
  • Simon Peyton Jones

Related topics

Seminal works

  • kohlbecker1986
  • taha2000
  • sheard2002
  • abelson1996

Frequently asked questions

¿Qué hace que un sistema de macros sea higiénico?
Un sistema de macros higiénico garantiza que los identificadores introducidos por una macro no capturen o enmascaren involuntariamente los identificadores en el sitio de la llamada, y viceversa, renombrando sistemáticamente las variables enlazadas durante la expansión.
¿En qué se diferencia la metaprogramación de las funciones ordinarias?
Las funciones ordinarias operan sobre valores en tiempo de ejecución, mientras que la metaprogramación opera sobre representaciones de programas, generando o transformando código, a menudo en tiempo de compilación, antes de que existan valores en tiempo de ejecución.

Methods for this concept

Related concepts