Brainfuck ist eine esoterische Programmiersprache (Esolang), die der Schweizer Student Urban Müller 1993 mit dem Ziel entwickelte, den kleinstmöglichen Compiler zu schreiben. Sie besteht aus nur acht Befehlen, ist aber bei unbegrenztem Speicher Turing-vollständig — ein klassischer Turing-Tarpit: extrem minimal, aber theoretisch genauso mächtig wie jede andere Sprache.

Das Modell: Speicherband und Zeiger

Ein Brainfuck-Programm arbeitet auf einem Speicherband (Tape) aus Byte-Zellen, typischerweise 30.000 Zellen. Ein Datenzeiger zeigt auf die aktuelle Zelle, der Befehlszeiger auf den nächsten Befehl im Quelltext.

Die 8 Befehle

>   Zeiger nach rechts (nächste Zelle)
<   Zeiger nach links (vorherige Zelle)
+   aktuellen Wert um 1 erhöhen
-   aktuellen Wert um 1 verringern
.   aktuellen Wert als Zeichen ausgeben
,   ein Zeichen einlesen
[   Sprung nach vorn, wenn aktueller Wert 0 ist
]   Sprung zurück, wenn aktueller Wert nicht 0 ist

Die eckigen Klammern bilden eine Schleife: [ und ] funktionieren wie ein while-Konstrukt, das bei Wert 0 der aktuellen Zelle beendet wird. Ein kompakter Interpreter passt in weniger als 200 Bytes C — genau das war Müllers ursprüngliche Motivation.

Beispiel: Hello World

++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Der Code setzt zuerst den Zellenwert 10 (Zeilenumbruch-Zähler), nutzt dann die Schleife, um die ASCII-Werte für „Hello World!" aufzubauen und gibt sie mit . aus.

Praxis und Verwandtschaft

  • Brainfuck-Interpreter gibt es für nahezu jede Plattform; viele sind als Python-Befehle-Skripte in wenigen Zeilen umgesetzt.
  • Das Sprachmodell ähnelt einer Assembly-Befehle-Maschine: direkter Speicherzugriff, keine Typen, keine Abstraktion.
  • Zusammen mit Befunge-Befehle und Whitespace-Befehle gehört Brainfuck zu den bekanntesten Esolangs der 1990er- und 2000er-Jahre.
  • Der Name war als Scherz gewählt — Müller selbst betrachtete die Sprache nie als ernsthaft nutzbar.

Mehr zu verwandten Konzepten: C/C++-Befehle (kompakter Code) und JavaScript-Befehle (Browser-Interpreter).