La méta-programmation est-elle courante? [fermé]


10

À quelle fréquence utilisez-vous ou avez-vous vu la méta-programmation utilisée dans des projets? À l'université, je n'ai jamais vu cela s'appliquer, mais je l'ai vu lors de mon travail précédent (quand je l'ai vu, j'ai été stupéfait de son efficacité).

Mais est-ce courant? Est-il utilisé tout le temps ou juste à l'occasion?


5
Ce n'est peut-être pas si courant; bien que très courant à Lisp, Lisp n'est pas si commun - pas même Common Lisp.
paul

explicite ou implicite? À un extrême, utiliser Java et C # est sans doute une méta-programmation, car leurs compilateurs produisent des fichiers de langue qui sont ensuite compilés ou interprétés. À l'autre, à peu près personne n'écrit du code pour générer du code dans un langage pour lequel ils ont construit un compilateur.
Móż

La métaprogrammation est omniprésente. Tout projet open source reposant sur Autotools utilise la métaprogrammation. MOC dans le monde Qt, tblgen dans LLVM, T4 dans de nombreux projets .NET, à peu près n'importe quel projet Web générant JavaScript, etc.
SK-logic

Réponses:


5

Si vous considérez la réflexion comme une sorte de méta-programmation, elle est relativement courante. Pour certaines personnes, même la programmation générique (modèles et génériques) est une forme de méta-programmation, c'est donc encore plus courant.

À mon avis, cependant, la méta-programmation est quelque chose de plus complexe, qui implique la génération de code réel, et donc assez rare, même dans les langages de script.


Pourquoi la métaprogrammation de modèles n'est pas une "génération de code réelle"?!? Les modèles C ++ sont complets de Turing et vous pouvez générer du code complexe arbitraire.
SK-logic

@ SK-logic: Je veux dire que du nouveau code est généré à la demande lors de l'exécution. Les modèles sont traités par le compilateur, vous pouvez les voir comme un puissant type de macro précompilateur.
Wizard79

pourquoi voudriez-vous générer du code en runtime? Les formes de métaprogrammation les plus puissantes (comme dans Common Lisp, Racket, Template Haskell, etc.) sont au moment de la compilation.
SK-logic

3

Je pense que cela dépend fortement de la langue que vous utilisez. Les gens du Common Lisp en font probablement un usage équitable - le Meta-Object Protocol permet des choses claires, une persistance transparente / orthogonale, par exemple - et Smalltalkers l'utilise fréquemment.


2

Il a tendance à apparaître de manière courante et cohérente dans les projets Common Lisp. Consultez OnLisp et Let Over Lambda pour une explication / un aperçu.

Si vous êtes juste après des exemples (et connaissez CL), consultez le référentiel Antiweb ; il y a beaucoup de méta-programmation en cours sous les couvertures.


1

Au cours des deux dernières années, la première partie de la programmation d'une nouvelle tâche a presque toujours consisté à écrire du code pour écrire du code. Il y a une tonne de passe-partout associés aux interactions avec une base de données qui peut être simplifiée jusqu'à la génération automatique de scripts. Pensez aux choses où vous devez interroger 3 tables pour former un objet ou quelque chose du genre. Pourquoi l'écrire vous-même s'il y a 10 de ces choses qui pourraient changer à l'avenir?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.