Befunge
# Befunge

Befunge ist eine esoterische Programmiersprache von Chris Pressey, die ähnlich wie Forth Stack-orientiert ist. Die Programme basieren auf einem 2-dimensionalen Schema. Der Quelltext besteht aus ASCII-Zeichen in einer 80×25 Zeichen großen Anordnung. Chris Pressey erfand Befunge 1993 mit dem Ziel, eine möglichst schwer kompilierbare Sprache zu definieren. Eine Schwierigkeit für Compiler stellt beispielsweise das p-Kommando dar, welches den Quellcode zur Laufzeit dynamisch verändern kann.

Interessant ist Befunge für Forschung und Lehre, praktische Anwendungen dürfte es eher nicht geben. Für das Verständnis von selbstmodifizierendem Code ist Befunge gut zum Experimentieren geeignet, auch unkonventionelle Methoden zur Mehrfachverwendung von Programmcode lassen sich an Befunge gut darstellen.

## Beispiele

### Addition zweier Zahlen

Der Quellcode ähnelt einem Forth-Quellcode: 4 und 3 werden nacheinander auf dem Stack abgelegt, dann werden beide Zahlen vom Stack geholt, addiert und dann das Ergebnis wieder auf dem Stack abgelegt. Der Punkt . ist die Anweisung, die oberste Zahl des Stacks auszugeben. Mit dem At-Zeichen @ wird das Programm beendet. Kommazahlen werden nicht unterstützt. Sobald z. B. „0,12“ herauskommen würde, gibt das Programm „0“ aus.

Das Gleiche, nur mit Richtungsänderungen:

Ganz kompakt, mit Füllzeichen:

### Hello World

Das erste " signalisiert, dass es sich um ASCII-Code handelt. Dann wird in Umgekehrter Reihenfolge Hello World! zeichenweise in den Stack gelesen. Das letzte " schließt den ASCII-Strom ab. Dann kommt eine Schleife, bei denen >, v und ^ die Richtungspfeile für den Programmfluss darstellen, und das , (Komma) die Print-Anweisung für ein ASCII-Zeichen darstellt. Das _ (Unterstrich) stellt die While-Bedingung dar, die solange erfüllt ist, solange der letzte geholte Wert größer 0 ist.

### Hello World ohne Schleife

Hier wird dasselbe gemacht wie oben, bloß wird statt einer Schleife die print-Funktion einfach mehrmals hintereinander ausgeführt, sodass der Stack am Ende leer ist.

### Hello World Extended

Hier wird das Zeichen für einen Zeilenumbruch (ASCII-Code 10) auf den Stack geschrieben, ebenso ein Zähler mit dem Wert 3. Nun wird „Hello World!“ ausgegeben und der Counter um 1 verringert. Diese Ausgabe wiederholt sich so lange, bis der bei Counter 0 angelangt. Ist dies der Fall, so wird ein Zeilenumbruch ausgegeben, der Counter auf 3 zurückgesetzt und der Benutzer nach einer Zahl gefragt. Ist diese Zahl vom Benutzer 0, so wird das Programm beendet, ansonsten fängt das Programm wieder mit dem Ausgeben von „Hello World!“ an.

### Fibonacci-Folge

Diese Programme geben die Fibonacci-Folge aus. Je nach Interpreter werden nur die Zahlen bis 233 ausgegeben.

Zuerst wird die 0 auf den Stack gelegt und sofort ausgegeben. Danach wird eine 1 auf den Stack gelegt. Dann betritt das Programm die Endlosschleife: Stack verdoppeln, Wert ausgeben, wieder verdoppeln, oberstes Zeichen an Position 0/0 im Code speichern, oberste Werte addieren, Wert von Position 0/0 holen und die beiden obersten Werte vertauschen.

Das folgende Programm tut das gleiche, nur wurde es für genau eine Zeile geschrieben und ist daher etwas unübersichtlicher:

Hier nochmal in gekürzter Form:

Hierbei gibt es Befehle für die Hinrichtung und für die Rückrichtung. Durch das Trampolin werden die Befehle aus der „falschen“ Richtung übersprungen.

## Weitere Beispiele in Befunge

### Conways Game of Life

Implementation des Game of Life von Dmitry M. Litvinov

### Ein kastriertes Schachprogramm

Beispiel für Eingabe: a2a3

### BefBef

BefBef ist ein Befunge-Interpreter, geschrieben in Befunge, von Wim Rijnders.

