Quanto è comune la meta-programmazione? [chiuso]


10

Con quale frequenza hai o hai visto la meta-programmazione essere utilizzata nei progetti? In uni non l'ho mai visto applicato, ma l'ho visto nel mio lavoro precedente (quando l'ho visto sono rimasto senza parole di quanto fosse efficace).

Ma quanto è comune? È usato tutto il tempo o solo occasionalmente?


5
Potrebbe non essere così comune; anche se abbastanza comune in Lisp, Lisp non è così comune - nemmeno Common Lisp.
paul

esplicito o implicito? Ad un estremo usare Java e C # è probabilmente meta-programmazione poiché i loro compilatori producono file di linguaggio che vengono poi compilati o interpretati. Dall'altro quasi nessuno scrive codice per generare codice in una lingua per cui ha creato un compilatore.
Móż,

La metaprogrammazione è onnipresente. Qualsiasi progetto opensource basato su Autotools utilizza la metaprogrammazione. MOC nel mondo Qt, tblgen in LLVM, T4 in numerosi progetti .NET, praticamente qualsiasi progetto Web che genera JavaScript e così via.
Logica SK

Risposte:


5

Se consideri il riflesso una sorta di meta-programmazione, è relativamente comune. Per alcune persone anche la programmazione generica (modelli e generici) è una forma di meta-programmazione, quindi è ancora più comune.

Secondo me, tuttavia, la meta-programmazione è qualcosa di più complesso, che implica la generazione di codice reale, e quindi abbastanza rara, anche nei linguaggi di scripting.


Perché la metaprogrammazione dei template non è una "vera generazione di codice"?!? I modelli C ++ sono completi di Turing e puoi generare codice complesso arbitrario.
Logica SK

@ SK-logic: intendo il nuovo codice generato su richiesta in fase di esecuzione. I modelli vengono elaborati dal compilatore, puoi vederli come un potente tipo di macro precompilatore.
Wizard79,

perché vorresti generare codice in runtime? Le più potenti forme di metaprogrammazione (come in Common Lisp, Racket, Template Haskell, ecc.) Sono in fase di compilazione.
SK-logic,

3

Penso che dipenda fortemente dalla lingua che usi. Le persone comuni di Lisp probabilmente ne fanno un uso equo - il Protocollo Meta-Object consente, per esempio, che la persistenza trasparente / ortogonale sia chiara - e gli Smalltalker lo usano frequentemente.


2

Tende a presentarsi comunemente e coerentemente nei progetti Common Lisp. Dai un'occhiata a OnLisp e Let Over Lambda per qualche spiegazione / approfondimento.

Se sei solo dopo esempi (e conosci CL), controlla il repository Antiweb ; c'è una buona dose di meta-programmazione in corso sotto le coperte.


1

Negli ultimi due anni la prima parte della programmazione di una nuova attività è stata quasi sempre la scrittura di codice per scrivere codice. C'è una tonnellata di boilerplate associati alle interazioni con un database che possono essere semplificati fino alla generazione automatica degli script. Pensa a cose in cui devi interrogare 3 tabelle per formare un oggetto o qualcosa del genere. Perché scriverlo tu stesso se ci sono 10 di queste cose che potrebbero cambiare in futuro?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.