Quão comum é a metaprogramação? [fechadas]

10

Com que frequência você viu a meta-programação ser usada em projetos? Na universidade, nunca vi isso ser aplicado, mas vi isso no meu trabalho anterior (quando o vi, fiquei impressionado com a eficácia).

Mas quão comum é isso? É usado o tempo todo, ou apenas ocasionalmente?

gablin
fonte
5
Pode não ser tão comum; embora bastante comum no Lisp, o Lisp não é tão comum - nem mesmo o Common Lisp.
paul
explícito ou implícito? Em um extremo, o uso de Java e C # é sem dúvida meta-programação, pois seus compiladores produzem arquivos de linguagem que são compilados ou interpretados. No outro, quase ninguém escreve código para gerar código em um idioma para o qual eles criaram um compilador.
Moz
A metaprogramação é onipresente. Qualquer projeto de código-fonte aberto baseado no Autotools está usando metaprogramação. MOC no mundo Qt, tblgen em LLVM, T4 em vários projetos .NET, praticamente qualquer projeto da Web que gere JavaScript, e assim por diante.
SK-logic

Respostas:

5

Se você considera a reflexão um tipo de metaprogramação, é relativamente comum. Para algumas pessoas, mesmo a programação genérica (modelos e genéricos) é uma forma de metaprogramação, o que é ainda mais comum.

Na minha opinião, no entanto, a metaprogramação é algo mais complexo, que envolve a geração real de código e, portanto, bastante incomum, mesmo em linguagens de script.

Wizard79
fonte
Por que a metaprogramação de modelos não é uma "geração de código real"?!? Os modelos C ++ são completos para Turing e você pode gerar código complexo arbitrário.
SK-logic
@ SK-logic: quero dizer que novo código está sendo gerado sob demanda em tempo de execução. Os modelos são processados ​​pelo compilador, você pode vê-los como um tipo poderoso de macro pré-compilador.
Wizard79
por que você deseja gerar código em tempo de execução? As formas mais poderosas de metaprogramação (como Common Lisp, Racket, Template Haskell etc.) estão em tempo de compilação.
SK-logic
3

Eu acho que depende fortemente do idioma que você usa. As pessoas comuns do Lisp provavelmente fazem um uso justo dele - o Meta-Object Protocol permite coisas simples, persistência transparente / ortogonal, por exemplo - e Smalltalkers o usam com frequência.

Frank Shearar
fonte
2

Ele tende a aparecer comum e consistentemente em projetos Common Lisp. Confira OnLisp e Let Over Lambda para obter algumas explicações / insights.

Se você está procurando apenas exemplos (e conhece CL), confira o repositório do Antiweb ; há muita metaprogramação oculta.

Inaimathi
fonte
1

Nos últimos dois anos, o primeiro pedaço de programação de uma nova tarefa quase sempre foi escrever código para escrever código. Há uma tonelada de clichê associada a interações com um banco de dados que pode ser simplificado até a geração automática de scripts. Pense nas coisas em que você precisa consultar 3 tabelas para formar um objeto ou algo assim. Por que escrever você mesmo se há 10 dessas coisas que podem mudar no futuro?

wheaties
fonte