Piet (Programmiersprache)
# Piet (Programmiersprache)

Piet ist eine esoterische Programmiersprache, bei der der Programmcode wie ein abstraktes Bild aussieht. Sie wurde von David Morgan-Mar erfunden und nach Piet Mondrian, einem Pionier der abstrakten Kunst, benannt. Das Beispielprogramm rechts oben gibt das Wort „Piet“ aus. Es ist in seiner artifiziellen Optik durchaus typisch; Morgan-Mar hatte sich zum Ziel gesetzt, dem Aussehen Mondrians abstrakter Gemälde (seit den 1920er-Jahren) nahezukommen.
Wie die meisten anderen esoterischen Programmiersprachen ist Piet ohne unmittelbaren praktischen Nutzen, wird aber in der akademischen Informatik-Ausbildung als Beispiel für ungewöhnliche Sprachkonzepte behandelt.

## Implementierung

Technisch muss der Programmcode in Form einer Bilddatei als GIF vorliegen. Piet ist eine Interpretersprache, das heißt, der Piet-Interpreter liest den Inhalt der Datei (hier einer Bilddatei) mit dem Quelltext bitweise ein und interpretiert die darin enthaltenen Informationen als Programmbefehle.
Die kleinste semantische Einheit in einer solchen Bilddatei ist ein „Codel“ (Zusammensetzung von „Code“ und „Pixel“), ein – in der visuellen Repräsentation als Bild – Quadrat aus n$^2$ Pixeln gleicher Farbe. Dieser Wert n wird dem Piet-Interpreter als Parameter übergeben und für die visuelle Darstellung von Piet-Programmen so gewählt, dass ein optisch ansprechendes (nicht zu kleines) Bild resultiert. Bei den Beispielen rechts hat n den Wert 4 (oben) beziehungsweise 11 (unten).
Die Programmiersprache Piet basiert auf Stapelspeicher-Operationen. Sie ist nach der Spezifikation Turing-vollständig, da sie beliebig große Werte in den Speicherzellen erlaubt. Wenn die maximale Größe der Werte einer Implementation allerdings endlich ist, ist diese Implementation nicht Turing-vollständig. Der Programmablauf wird gesteuert durch zwei Zeiger, die – visuell interpretiert – auf einem verschlungenen Pfad durch die Bildebene mit den Codels führen. Syntaxelemente sind dann beispielsweise
* das Eintreten in ein schwarzes oder weißes Farbfeld,
* die Zahl der Codels einer zusammenhängenden Farbfläche,
* der Übergang von einer Farbe zur nächsten.
Diese (und weitere) Sprachelemente kodieren die typischen Stapelspeicher-Operationen wie push und pop sowie arithmetische Operationen und solche für die Ein- und Ausgabe von Zeichen.