Whitespace ist eine esoterische Programmiersprache, die 2003 von Edwin Brady und Chris Morris an der University of Durham entwickelt und am 1. April 2003 veröffentlicht wurde. Ihre Besonderheit: Nur Leerzeichen, Tabulatoren und Zeilenumbrüche sind signifikant — alle anderen Zeichen werden als Kommentar ignoriert. Der Quellcode ist damit in einem normalen Editor praktisch unsichtbar.

Das Modell: Stack und Heap

Whitespace ist imperativ und stackbasiert. Jeder Befehl beginnt mit einer Befehlsfamilie (z. B. Space für Stack-Operationen), gefolgt von Parametern, die als Binärzahlen mit Space = 0 und Tab = 1 kodiert werden. Ein Heap erlaubt zusätzlich benannten Speicherzugriff.

Die Befehlsfamilien

[Space]  Stack-Operationen: push, dup, swap, discard
[Tab][Space]  Arithmetik: add, sub, mul, div, mod
[Tab][Tab]  Heap: store (schreiben), retrieve (lesen)
[Tab][LF]  Kontrollfluss: Labels, call, jump, ret
[LF]  I/O: print/read char, print/read number

Konkret: [Space][Space] gefolgt von einer Binärzahl legt den Wert auf den Stack (push), [Tab][LF][Space][Space] gibt die oberste Zahl aus. Das Präfix [LF] kennzeichnet die I/O-Familie, [Space] beziehungsweise [Tab] die Ausgabe als Zeichen beziehungsweise Zahl.

Beispiel: Hello World

               
                    
                   
...

Jede Zeile beginnt mit [Space][Space] (push) und einer Binärzahl für den ASCII-Wert, gefolgt von [Tab][LF][Space][Space] (Zeichen ausgeben) — nur Leerzeichen, Tabs und Zeilenumbrüche, unsichtbar im Quelltext.

Praxis und Verwandtschaft

  • Whitespace war ein Aprilscherz am 1. April 2003, wurde aber zu einer der bekanntesten Esolangs überhaupt.
  • Die Entwickler schrieben später mit Kaya und Idris ernsthafte Sprachen — Whitespace blieb ein Experiment.
  • Zusammen mit Brainfuck-Befehle und Befunge-Befehle bildet Whitespace das klassische Trio der Turing-Tarpits: minimalistische Esolangs, die nur durch ihre absichtliche Unlesbarkeit auffallen.
  • Wer sich mit der Stack-Logik vertraut machen will, findet eine sanftere Einführung in den Python-Befehle und den Haskell-Befehle.