189 votes

Qu'est-ce que la métaprogrammation ?

J'ai lu un article sur TheServerSide concernant la programmation des ployglots sur la plate-forme Java . Certains commentaires de l'article font référence à la métaprogrammation comme à la capacité de générer du code (peut-être à la volée).

La métaprogrammation est-elle la capacité de générer du code à la volée ou la capacité d'injecter des méthodes et des attributs dans des objets existants au moment de l'exécution (comme le permettent certains langages dynamiques tels que Python, Ruby et Groovy).

7voto

Steve Rowe Points 14688

La métaprogrammation consiste à écrire un programme qui produit un autre programme. C'est un domaine dans lequel des langages comme Lisp sont très performants. Il est beaucoup plus facile de le faire dans un langage qui supporte de vraies macros (pas des macros C++, mais plutôt des macros qui peuvent manipuler le code qu'elles produisent) comme Ruby, Lisp, Scheme, etc. que dans un langage comme Java.

L'une des solutions consiste à créer un "langage spécifique à un domaine", c'est-à-dire à améliorer un langage de programmation pour accomplir une tâche spécifique. Il peut être incroyablement puissant s'il est utilisé correctement. Ruby on Rails est un bon exemple de ce type de programmation.

Si vous souhaitez explorer cette méthode, consultez le site suivant Structure et interprétation des programmes informatiques qui est l'un des ouvrages de référence sur le sujet.

5voto

Mr Fooz Points 21092

wikipedia propose un article intéressant sur le sujet. Il n'est pas nécessaire d'apporter des modifications au moment de l'exécution pour que l'on puisse parler de métaprogrammation. Par exemple, de nombreuses personnes utilisent les modèles C++ pour faire de la métaprogrammation au moment de la compilation.

1voto

Saquib Ahsan Points 1

Comprenons-le à l'aide d'un exemple simple !

template<class T>
class Item{
private:
    std::string name;
    T value;
public:
    Item(std::string name, T value)
        : name{name}, value{value} {}
    std::string get_name() const {return name;}
    T get_value() const {return value;}
};

Dans cet exemple, T peut être une valeur de n'importe quel type. Par exemple, nous attendons des entiers ou des doubles, dans ce cas. Cela se compilera, mais ne générera pas de code. Il s'agit simplement d'un plan . Le code est généré par le compilateur à l'aide d'un modèle ou d'un plan lorsque l'utilisateur utilise un code spécialisée version du modèle ou du plan. C'est ce qu'on appelle la métaprogrammation !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X