Celem MĂźllera było stworzenie języka z jak najmniejszą ilością instrukcji, oraz jak najmniejszego kompilatora. Oryginalny kompilator, napisany na Amigę ma rozmiar 240 bajtów.
Jak sugeruje nazwa, programowanie w tym języku jest dosyć trudne. Bez względu na to, w Brainfucku można zaimplementowac dowolny algorytm, ponieważ jest on zupełny w sensie Turinga.
Język opiera się o prosty model maszyny, składający się, oprócz programu, z tablicy bajtów (zazwyczaj 30000) zainicjalizowanych zerami, oraz wskaźnika do tej tablicy, zainicjalizowanego tak, aby wskazywał na jej pierwszy element.
Instrukcje
Brainfuck zawiera 8 nastepujących jednoznakowych instrukcji :
Znak
Znaczenie
Odpowiednik w C
>
zwiększa wskaźnik o 1
p++
<
zmniejsza wskaźnik o 1
p--
+
zwiększa o 1 bajt w bieżącej pozycji
t[p]++
-
zmniejsza o 1 bajt w bieżącej pozycji
t[p]--
.
wyświetla znak w bieżącej pozycji(ASCII)
putchar(t[p])
,
pobiera znak i wstawia go w bieżącej pozycji(ASCII)
t[p]=getchar()
[
skacze do odpowiadającego mu ] jeśli w bieżącej pozycji znajduje się 0
while(t[p]){
]
skacze do odpowiadającego mu [
}
Przy czym "bieżąca pozycja" oznacza element w tablicy wskazywany przez wskaźnik.
Wszystkie inne znaki są ignorowane, co jest przydatne przy pisaniu komentarzy.