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?


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.


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.


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.


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?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.