Piet : Code et Art Contemporain

L’innovation, processus complexe s’il en est, nécessite parfois de s’abstraire de la notion de but. La programmation ne déroge pas à cette règle et c’est dans ce contexte que s’inscrit le language de programmation Piet. Il s’agit d’un language de programmation dit exotique, c’est à dire qu’il n’a pas vocation à être utilisé dans un contexte réel, mais plutôt à explorer une possibilité ou prouver un concept particulier. On trouve donc parmi eux Piet, le Brainfuck, le Whitespace, le Shakespeare, et d’autres encore.

Programme Hello World en Piet (Wikipedia, Creative Commons)

En Piet, les programmes sont des images, et les pixels (appelés Codels) définissent les instructions du programme. Les programmes Piet peuvent ensuite être lancés dans des interpréteurs, disponibles ici pour les plus curieux. L’interpréteur se comporte comme un processeur équipé d’une pile et capable d’effectuer des instructions basiques. Ces instructions sont codées par les changements de teinte et de luminosité lors du passage d’un pixel au prochain. Il est possible de modifier l’ordre de passage d’un pixel au suivant grâce à des registres (Pointeur de direction et sélectionneur de Codel), comparables aux pointeurs d’instruction d’un processeur classique.

C’est grâce à cela qu’il est possible de faire des branchements conditionnels dans le programme, et par conséquent des boucles. Le language Piet est dit Turing-complet, c’est à dire qu’il possède toute les capacités d’une machine de Turing. Il est capable de calculer toutes les fonctions mathématiquement calculables, ce qui concrètement se traduit par un ensemble de capacités telles que l’appel récursif de fonctions, les boucles, les tests : la seule limite est la capacité de mémoire.

Concrètement, 18 couleurs, définies par une palette, sont disponibles. 6 teintes sont disponibles : rouge, jaune, vert, cyan, bleu, magenta. Ces teintes sont disponibles en trois luminosités : clair, normal, foncé. La différence de teinte est définie comme l’écart entre deux teintes, avec retour au début, dans l’ordre si dessus. Ainsi la différence de teinte entre rouge et vert est de 2. La différence de teinte entre magenta et rouge est de 1. Pour les luminosités il n’y a pas de retour au début, la différence de luminosité entre clair et foncé est de 2. À ces couleurs s’ajoutent le blanc et le noir.

Les instructions sont ensuite déduites de la table suivante :

homepages.vub.ac.be/~diddesen/piet/index.html

Pour mieux comprendre, analysons pas à pas un programme simpliste ci-contre, que vous pouvez tester à l’aide de cet interpréteur par exemple. Piet analyse les codels par blocs de codels adjacents de même couleur. Ici nous avons trois blocs de couleurs, soit trois instructions.

Le programme commence au codel en haut à gauche (appelons cette position (0,0)). Le pointeur de direction (DP) est initialisé vers la droite, et le sélectionneur de codel(CC) vers le haut. Comme l’évaluation des instructions se fait par bloc, le prochain codel évalué sera celui adjacent au bloc rouge clair, dans la direction des registres de direction, c’est à dire en haut à droite. Donc le codel à la position(2, 0). La différence de teinte est nulle, la différence de luminosité est de 1 (rouge normal-rouge foncé). L’instruction correspondante est donc push, on empile une valeur. Mais quelle valeur empiler ? On empile le nombre de codels du bloc que l’on quitte (rouge normal). Le passage du bloc 1 au bloc 2 signifie donc “push 4”.

On continue de la même manière : DP et CC sont inchangés, donc le prochain codel évalué est (4, 0). Différence de teinte de 5, différence de luminosité 1, l’instruction est out(number). Cette instruction dépile la valeur en haut de la pile pour l’afficher en tant que nombre, il s’affiche donc 4.

Puis on rencontre un bord. Dans ce cas DP et CC sont modifiés de telle sorte à chercher une nouvelle direction valide dans le sens horaire. La premiere trouvée ici sera donc la marche arrière. Celle-ci correspond aux instructions mul, pop, qui n’auront pas d’effet car la pile est vide. De retour au début, on heurte a nouveaux un bord, on tourne et on est revenu au début du programme. Ce programme est donc une boucle infinie qui affiche des ‘4’.

Il est intéressant de noter que si données et instructions paraissent mélangées, elles sont dans deux espaces différents : l’espace colorimétrique pour les instructions et l’espace spatial pour les données.

Comme les programmes sont des images, il suffit d’un éditeur d’images pour programmer en Piet. Programmer ainsi est en réalité un assemblage, car il n’y a pas d’étape de compilation, et que l’on inscrit directement les instructions. C’est toutefois particulièrement incommode à programmer, c’est pourquoi il ont étés développés des IDE (Environnements de développement intégrés) qui fournissent un debugger et une interface graphique pour faciliter le développement. On peut trouver ces IDE ici.

Sans avoir un grand intérêt pour développer directement un système, Piet vaut donc la peine d’être considéré en tant qu’ouverture spirituelle et intellectuelle à un environnement de réflexion plus large, qui se peut être source d’innovation.