K7PL

A.6. Distinction de phase et métaprogrammation🔗

Ces quatre codes protègent l'invariant énoncé au chapitre 1 (§1.4) : le comportement observable d'un programme ne dépend jamais de ce qui appartient à la phase de compilation. C'est cet invariant qui autorise la Phase 8 à purger les blocs de spécification sans changer le programme ; le violer rendrait l'effacement incorrect, et non pas seulement imprudent.

Tableau 27 :

Codes protégeant la distinction de phase et l'hygiène des macros

Code

Déclencheur et correction

ERR-TYP-011

Projection implicite e.τ sur un paquet existentiel dont le témoin porte un grade effaçable (chapitre 3, §3.3). C'est un filtrage sur donnée effacée, qui ferait perdre la canonicité. Exiger un unpack explicite, ou rendre le témoin non effaçable.

ERR-TYP-012

Éliminateur discriminant à l'exécution sur un argument de la phase de compilation — match sur un paramètre de typestate, cond sur un paramètre fantôme, filtrage sur une dimension physique (chapitre 3, §3.2). Porter un tag explicite, qui appartient alors à la phase d'exécution et cesse d'être gratuit.

ERR-MAC-001

Macro dont l'expansion introduit une liaison capturable par le site d'appel sans l'avoir déclarée. L'anaphore n'est pas interdite, elle doit être visible : annoter la macro de binds pour étendre explicitement son index de portée (chapitre 5, §5.5).

ERR-MAC-002

Macro annotée binds dont l'expansion n'introduit aucune liaison. Retirer l'annotation, qui alourdit la signature sans contrepartie.