Méta-programmation

La méta-programmation consiste à écrire des programme en utilisant des programmes pour ce faire. Il existe différentes façons de procéder :

Les deux premières techniques sont disponibles pour les langages à typage statique. Il s'agit d'une forme puissante mais limitée de méta-programmation. Le principe du générateur de code revient en effet à construire un compilateur comprenant la sémantique d'un langage donné, avec des ajouts. Cette approche n'est donc pas facilement portable. La programmation à base de templates permet de construire des opérateurs pour des types de données complètement hétérogènes - c'est utile en C++. Les templates de Common Lisp sont plus généraux. Ces deux techniques ne concernent que la phase de compilation.

Les langages à typage dynamique et donc réflexifs offrent des moyens d'introspection et de modification en cours d'exécution, non seulement des valeurs et objets du domaine d'une application mais du comportement du système (entendre comme le langage + ses bibliothèques standards). Les protocoles à méta-objets permettent de spécifier le comportement au niveau des classes elles-mêmes (on y considère les classes, les méthodes, comme des objets d'un domaine particulier).

Un système de macro permet de réaliser des transformations de source à source : on peut ainsi ajouter des opérateurs nouveau à un langage sans altérer sa spécification ni modifier le compilateur (contrairement au principe des générateurs de code). Seuls les langages représentés avec des s-expressions offrent un système de macros satisfaisant et utilisable, du fait de la convergence entre la syntaxe abstraite des programmes et leur syntaxe concrète.

See also: Méta-programmation, CLOS, C plus plus, Common Lisp, Introspection, Macro, Réflexivité, S-expression, Smalltalk, Syntaxe abstraite