À retenir
- L'hygiène évite les collisions de noms de variables (capture accidentelle).
- Elle rend le code généré automatiquement beaucoup plus sûr et prévisible.
- Elle dispense le développeur de devoir vérifier chaque nom de variable utilisé dans les macros d'une bibliothèque.
En programmation, on dit qu'un système de macros est hygiénique lorsqu'il empêche automatiquement les conflits de noms de variables. C'est un mécanisme de sécurité qui garantit que les variables créées à l'intérieur d'une macro ne viendront pas accidentellement interférer avec celles du reste du programme (et inversement), comme si le code de la macro était enfermé dans une bulle étanche.
Étymologie
Dérivé du grec hygieinos (sain), le terme est utilisé en informatique depuis le milieu des années 1980 (notamment pour le langage Scheme). Il exprime l'idée de garder l'espace de noms "propre" et d'éviter la "contamination" entre les différentes parties du code lors de la génération automatique de texte source.
Exemples d'usage
- Dans le langage Rust, les macros sont hygiéniques : une variable
xdéfinie dans une macro ne sera pas la même que la variablexdéfinie par l'utilisateur du code. - Le langage Scheme est historiquement le premier à avoir formalisé cette notion pour corriger les bugs fréquents dans Lisp.
- Le préprocesseur du langage C est un exemple de système non hygiénique, car il effectue de simples remplacements de texte sans vérifier les conflits de noms.
Cas d'usage
Ce concept est crucial en métaprogrammation, c'est-à-dire quand on écrit des programmes qui génèrent ou transforment d'autres programmes. On le retrouve dans la création de DSL (langages dédiés), de bibliothèques d'automatisation et dans la conception de compilateurs modernes.
Bonnes pratiques
Privilégiez toujours les systèmes de macros hygiéniques s'ils sont disponibles. Si vous devez utiliser des macros non hygiéniques (comme en C ou C++), la règle d'or est de nommer vos variables internes avec des préfixes uniques ou des noms très longs et improbables pour réduire le risque de collision.
Synonymes
Antonymes
Conseil
Pour bien comprendre, imaginez une macro comme un calque que vous posez sur votre dessin. Un système hygiénique s'assure que les coups de crayon sur le calque ne tachent jamais le papier original en dessous, même si vous dessinez aux mêmes endroits.
Questions fréquentes
Qu'est-ce que la capture de variable ?
C'est l'erreur qui survient lorsqu'une macro utilise par mégarde une variable du code principal au lieu de la sienne, provoquant des bugs imprévisibles.
Peut-on forcer une macro à être non hygiénique ?
Oui, certains langages permettent d'enfreindre l'hygiène volontairement pour interagir directement avec les variables du code appelant.