Homoikonizität
# Homoikonizität

Homoikonizität (d. h. Selbst-Abbildbarkeit oder Selbst-Repräsentierbarkeit) ist die Eigenschaft von Programmiersprachen, dass Programme gleichzeitig Datenstrukturen derselben Sprache sind. In solchen Sprachen ist es einfach, Programme zu schreiben, die Programmcode derselben Sprache erzeugen.

Wichtigstes Beispiel einer homoikonischen Programmiersprache ist Lisp und seine Ableitungen: Die grundlegenden Datenstrukturen sind Listen, Symbole, Zahlen, Strings und diese haben eine einfache externe Repräsentation als S-Expressions. Lisp-Programme werden ebenfalls ausschließlich aus Datenobjekten dieser Typen gebildet. Es ergibt sich somit in Lisp auf natürliche Weise (mit den eingebauten Funktionen für diese Datentypen) die Möglichkeit, Programmcode zu erzeugen und zu manipulieren.

Dasselbe gilt für XSLT. Sowohl Programme als auch Daten der Sprache sind valides XML. Ebenfalls homoikonisch ist der Maschinencode von von-Neumann-Rechnern. Hier bestehen Daten und Programme gleichermaßen aus Binärwörtern in der Wortbreite der CPU.

In einem erweiterten Sinn kann man weitere Sprachen als homoikonisch betrachten, zum Beispiel Prolog, REBOL, SNOBOL, TRAC, Tcl, Io, Joy, Julia, PostScript, R, V und Elixir. Die Einschränkung ist bei diesen jedoch, dass Programme nicht direkt als strukturierte Daten verarbeitet werden können. Es gibt aber jeweils alternative Darstellungsmöglichkeiten für Programmcode, durch die das möglich wird.

Eingeführt wurde der Begriff von Douglas McIlroy 1960 in dem Dokument Macro Instruction Extensions of Compiler Languages. 1965 verwendet ihn ein Dokument über die Textverarbeitungssprache TRAC. Alan Kay benutzte den Begriff 1969 in seiner Dissertationsschrift.

