ScholarGate
Assistente

Metaprogramação e Macros

Metaprogramação trata programas como dados que outros programas podem gerar, inspecionar ou transformar, com macros fornecendo abstração sintática controlada em tempo de compilação.

Encontrar tema com PaperMindEm breveFind papers & topics
Tools & resources
Baixar slides
Learn & explore
VídeoEm breve

Definition

Metaprogramação é a escrita de programas que produzem, analisam ou transformam outros programas (ou a si mesmos); macros são uma facilidade de metaprogramação que reescreve a sintaxe da fonte em código expandido antes ou durante a compilação.

Scope

Este tópico abrange técnicas pelas quais os programas manipulam programas: macros lexicais e sintáticas, expansão de macro higiênica, geração de código em tempo de compilação, programação multiestágio, reflexão e sistemas de template. Ele aborda como esses mecanismos estendem a sintaxe e as abstrações de uma linguagem, preservando a correção, especialmente em relação à captura e ligação de variáveis.

Core questions

  • Como a abstração sintática pode estender uma linguagem sem captura de nome insegura?
  • O que distingue a metaprogramação em tempo de compilação da reflexão em tempo de execução?
  • Como a programação multiestágio separa a geração de programas da execução?
  • Quando a metaprogramação melhora a abstração em vez de prejudicar a legibilidade e as ferramentas?

Key theories

Expansão de macro higiênica
Kohlbecker e colegas introduziram macros higiênicas, que renomeiam automaticamente as variáveis ligadas durante a expansão para que o código gerado por macro não possa acidentalmente capturar ou ser capturado por nomes no local de uso.
Programação multiestágio
Taha e Sheard formalizaram a computação em estágios com anotações explícitas, fornecendo uma descrição tipada da geração e execução de código em distintas fases de avaliação.
Metaprogramação de template
Sheard e Peyton Jones adicionaram metaprogramação tipada em tempo de compilação ao Haskell, permitindo que os programas construam e insiram sintaxe abstrata em tempo de compilação.

Clinical relevance

Macros e metaprogramação permitem que autores de bibliotecas criem abstrações específicas de domínio, eliminem código repetitivo (boilerplate) e realizem especialização em tempo de compilação para melhor desempenho. A higiene e a disciplina de estágio são o que tornam essas poderosas facilidades seguras o suficiente para o uso diário.

History

As macros datam do início do Lisp e da linguagem assembly, mas as macros Lisp não higiênicas eram propensas à captura acidental de variáveis. A expansão higiênica de Kohlbecker em 1986 resolveu isso, influenciando as regras de sintaxe do Scheme. Trabalhos subsequentes formalizaram a programação multiestágio (MetaML) e trouxeram a metaprogramação tipada em tempo de compilação para linguagens como Haskell, Scala e Rust.

Debates

Poder versus compreensibilidade das macros
Os projetistas de linguagem ponderam o poder expressivo da abstração sintática irrestrita contra a dificuldade que ela cria para leitores, depuradores e ferramentas, motivando a higiene e sistemas de macro 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

O que torna um sistema de macros higiênico?
Um sistema de macros higiênico garante que os identificadores introduzidos por uma macro não capturem ou sombreiem acidentalmente os identificadores no local da chamada, e vice-versa, renomeando sistematicamente as variáveis ligadas durante a expansão.
Como a metaprogramação difere das funções comuns?
Funções comuns operam em valores de tempo de execução, enquanto a metaprogramação opera em representações de programas, gerando ou transformando código, frequentemente em tempo de compilação, antes que quaisquer valores de tempo de execução existam.

Methods for this concept

Related concepts