Macro-définition - Définition et Explications

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

En programmation informatique, une macro-définition ou simplement macro est l'association d'un texte de remplacement à un identificateur, tel que l'identificateur est remplacé par le texte dans tout usage ultérieur. Le plus souvent, on permet également le passage de paramètres syntaxiques. L'usage (L’usage est l'action de se servir de quelque chose.) d'une macro comme instruction (Une instruction est une forme d'information communiquée qui est à la fois une commande et une explication pour décrire l'action, le comportement, la méthode ou la tâche qui devra commencer, se terminer, être conduit, ou exécuté.) est souvent appelée macro-instruction et l'opération de remplacement d'une macro-instruction par sa définition (Une définition est un discours qui dit ce qu'est une chose ou ce que signifie un nom. D'où la division entre les définitions réelles et les définitions nominales.) la macro-expansion. Les macros sont donc un moyen de faire de la métaprogrammation (La métaprogrammation est, par analogie avec les métadonnées et les métaclasses, la programmation de métaprogrammes. Elle est l'écriture de programmes qui manipulent des données décrivant des...).

Macros en programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel, cf. VHDL).)

Par substitutions de chaînes de caractères

Ainsi, par exemple, en langage C, define introduit une macro-définition (En programmation informatique, une macro-définition ou simplement macro est l'association d'un texte de remplacement à un identificateur, tel que...). On pourra par exemple introduire la valeur absolue (Un nombre réel est constitué de deux parties: un signe + ou - et une valeur absolue.) comme une macro-instruction : #define abs(x) ((x) < 0 ? - (x) : (x)). Cela signifie qu'à chaque fois que le programme contiendra une construction de la forme abs(x)x est une expression quelconque, cette construction sera étendue comme ((x) < 0 ? - (x) : (x)).

Sur cet exemple, on observe l'un des dangers liés à des macro-définitions fondées sur des substitutions de chaînes de caractères : on ne vérifie absolument pas que x a un type arithmétique (L'arithmétique est une branche des mathématiques qui comprend la partie de la théorie des nombres qui utilise des méthodes de la géométrie algébrique et de la théorie des groupes. On l'appelle plus...) au moment de l'appel de la macro, et l'utilisateur ne se rendra compte d'éventuels problèmes que lors de compilation du code étendu, avec un message (La théorie de l'information fut mise au point pour déterminer mathématiquement le taux d’information transmis dans la communication d’un message par un canal de communication, notamment en présence de parasites appelés bruits :...) d'erreur faisant référence au code après expansion. Par ailleurs, si l'évaluation de x est coûteuse ou provoque des effets de bords, des problèmes se poseront puisque x sera évalué plusieurs fois.

Par transformation source à source

Dans la famille Lisp

Le langage Lisp permet de puissantes définitions de macros, avec manipulation de la syntaxe abstraite du code en paramètre (Un paramètre est au sens large un élément d'information à prendre en compte pour prendre une décision ou pour effectuer un calcul.) par un programme Lisp. Les langages Common Lisp (Common Lisp est un langage fonctionnel impur de la famille Lisp.) (CL), Scheme et Dylan ont un système de macros de ce type. Dans le cas de CL et Scheme, qui sont constitués de s-expressions, l'écriture des macros est naturelle car le code source (Le code source (ou les sources voire le source) est un ensemble d'instructions écrites dans un langage de programmation informatique de haut niveau, compréhensible par un être humain...) manipulé est déjà sous la forme d'un arbre (Un arbre est une plante terrestre capable de se développer par elle-même en hauteur, en général au delà de sept mètres. Les arbres acquièrent une structure rigide composée d'un...) de syntaxe (c'est tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) l'intérêt de cette représentation du code). Dans le cas de Dylan, la syntaxe concrète (La concrète est une pâte plus ou moins dure obtenue après extraction d’une matière première fraîche d’origine végétale (fleurs, feuille) par solvants volatils (non...) du langage, irrégulière à la façon de Haskell - dont elle s'inspire - complique la tâche du programmeur (En informatique, un développeur (ou programmeur) est un informaticien qui réalise du logiciel en créant des algorithmes et en les mettant en œuvre dans un langage de programmation.) de macros à cause de l'écart entre l'apparence du code et sa structure syntaxique abstraite.

Primitives

La primitive defmacro (dans CL) prend en entrée un ensemble (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une multitude qui peut être comprise comme un tout », comme...) de s-expressions non évaluées et renvoie en sortie une transformation syntaxique de ces expressions (une nouvelle s-expression). Il est possible de réaliser toutes sortes de vérifications statiques et de garantir la correction du code produit. Ce système est infiniment plus robuste que les substitutions de chaînes de caractères. Les macros de CL peuvent souffrir de la capture (Une capture, dans le domaine de l'astronautique, est un processus par lequel un objet céleste, qui passe au voisinage d'un astre, est retenu dans la gravisphère de ce dernier. La capture de l'objet céleste...) de variable (En mathématiques et en logique, une variable est représentée par un symbole. Elle est utilisée pour marquer un rôle dans une formule, un prédicat ou un algorithme. En statistiques,...) accidentelle liée à l'utilisation dans une macro d'un symbole qui existe déjà dans l'environnement (L'environnement est tout ce qui nous entoure. C'est l'ensemble des éléments naturels et artificiels au sein duquel se déroule la vie humaine. Avec les enjeux...) d'expansion de la macro.

Scheme a les primitives defmacro (identique à ce qui existe dans CL), syntax-rules et define-syntax qui sont plus complexes, plus difficiles à utiliser également mais qui présentent, selon ses défenseurs, l'avantage d'éviter systématiquement la capture non intentionnelle de variable : on l'appelle un système de macros hygiénique (ce terme implique que les macros de CL seraient, elles, non hygiéniques ...).

Types de macros

Il existe différents types de macros en Lisp, nous examinons spécifiquement les macros de CL :

  • macros-fonctions (transformation de source à source),
  • macros de lecteur (en: READER MACROS) qui permettent de modifier la table de lecture de la fonction READ (le parseur CL standard), par exemple pour lire et interpréter des syntaxes différentes des s-expressions,
  • macros de compilateur (en: COMPILER MACROS) qui permettent de spécifier le code d'une fonction pour des valeurs (ou domaines) particulières des paramètres.

Macros dans certains logiciels

Certains logiciels ou environnements permettent d'associer des suites d'instructions complexes à des touches clavier  on parle alors de macros clavier.

Certains logiciels tels que Microsoft Word (Microsoft Word est un logiciel de traitement de texte publié par Microsoft. Cette société publie d'autres logiciels de traitement de texte, dont Bloc-notes et Microsoft Works, mais...) contiennent un petit langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain d'écrire un code source qui sera analysé par une machine, généralement un...) permettant de commander les fonctionnalités du logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements effectués automatiquement par un appareil informatique. Y...). On appelle souvent les programmes dans ce genre de langages des macros.

Cet article vous a plus ? Partagez-le sur les réseaux sociaux avec vos amis !
Page générée en 0.461 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique