IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Brainfuck - Die Programmiersprache



Brainfuck - Die Programmiersprache

In diesem Artikel findet ihr alle wichtigen Informationen zur Programmiersprache Brainfuck. Dieser Artikel richtet sich zwar an Anfänger, enthällt aber auch Elemente die für Profis interessant bzw. wissenswert sind.


Autor: Peter Becker (Floyd)
Datum: 08-04-2005, 11:04:49
Referenzen: Wikipedia
Schwierigkeit: Anfänger
Ansichten: 14073x
Rating: 7 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Brainfuck

Brainfuck wurde im Jahre 1993 von Urban Mueller als eine der wenigen minimalistischen Programmiersprachen entwickelt. Sie setzt die Prinzipien der Turing-Maschine, welche im Zweiten Weltkrieg zur Entschlüsselung der Engima-Verschlüsselung benutzt wurde, virtuell um.

Daten und Fakten

Der C-Sourcecode eines in Brainfuck geschriebenen Programms hat nur eine minimallänge von 1055 Bytes - also rund 1KB. Brainfuck arbeitet (standardmäßig) auf einem 30000 Bytes großen Array und einem Pointer, der irgendwo in das Array zeigt. Der Pointer kann vor- und zurückgesetzt werden, die Werte unter dem Counter können hoch- und runtergezählt, eingelesen und ausgegeben werden. Außerdem gibt es ein sehr hübsches Schleifenkonstrukt.

Befehle

Brainfuck kommt mit sage und schreibe 8 Befehlen aus. Daher kommt auch die Bezeichnung "minimalistische" Programmiersprache da die Sprache über ein Minimum an Befehlen - in diesem Fall 8 - verfügt.

BefehlC EquivalentBeschreibung
<++ptr;Setzt den Pointer um 1 weiter
>--ptr;Setzt den Pointer um 1 zurück
+++*ptr;Den Wert des Elements im Array um 1 erhöhen
---*ptr;Den Wert des Elements im Array um 1 verringern
[while(*ptr){Starte einer Schleife - Abbruchbedingung ist, das der Wert des Elements im Array unter dem Pointer 0 beträgt
]}Ende einer Schleife
.putchar(*ptr);ASCII-Code des Wertes unter dem Pointer ausgeben
,*ptr=getchar();Zeichen einlesen und im Array unter dem Pointer speichern

Jedes Array und jedes Element eines Arrays wird, mit dem ersten Setzen des Pointers auf dieses Element mit 0 initialisiert. Der Pointer selbst steht zu Beginn ebenfalls immer auf 0.

Beispiel

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


Selbst erfahrenen C Programmierer versetzt ein solchen Quellcode erstmal einen Schock.
Hier nun ein paar Kommentare:

>+++++++++Da > den Pointer um 1 erhöht und + den Wert des Elements unter dem Pointer um 1 erhöht wird das Element Array[1] auf 9 gesetzt. Das Element Array[0] bleibt hingegen bei 0.
[<++++++++>-]Es wird eine neue Schleife gestartet. Der Pointer wird zu Beginn zurück auf Array[0] gesetzt und anschließend das Element auf 8 erhöht. Das Element Array[1] wird dadurch 9 mal um 8 erhöht was die Zahl 72 bewirkt. Und der ASCII-Code für H ist 72.
<.Nun wird nur noch der Zeiger zurück auf das Element Array[0] gesetzt und das Zeichen - also das H - ausgegeben.

Dieser Vorgang wird solange wiederhohlt bis alle Zeichen von "Hello World!" als ASCII-Code einmal berechnet wurden und ausgegeben wurde.
Doch wieso das ganze so umständlich? Warum nicht gleich 72 mal ein Plus schreiben und anschließend nen Punkt?
Nun das hängt mit der Vorliebe von Programmierern für cryptische Quellcodes zusammen. Oder was auch ne Möglichkeit wäre das >+++++++++[<++++++++>-]<. schneller schreiben läßt als 72 mal ein Plus und die größe des Programms nicht unnötig anschwillt.

Ein paar Worte zu Brainfuck

Bevor jetzt die Frage aufkommt, wieso soll ich überhaupt Brainfuck verwenden oder wozu wurde Brainfuck erfunden, werd ich auch diesen interessanten Punkt noch erläutern.

Brainfuck ist eine so genannte Write-Only-Sprache. Dieser Begriff rührt daher das es hundert mal einfach ist ein Programm in Brainfuck neu zu schreiben als eines, eines anderen Entwicklers zu verstehen. Von daher ist es fast unmöglich ein komplettes in Brainfuck geschriebenes Programm zu erweitern bzw. auszubauen. Wobei es schon ein Ding der Unmöglichkeit ist überhaupt ein größeres Programm in Brainfuck zu schreiben. Fehlersuche und ähnliches ist unter Brainfuck extrem umständlich und langwirig und was erschwerend dazukommt ist, das es in Brainfuck keine Kommentare gibt.

Brainfuck kann man in den Bereich der Konzept-Sprachen einordnen. Urban Mueller hat sie damals entwickelt um das Prinzip einer Turing-Maschine virtuell abzubilden und damit zu beweisen das es keine genau definierte mathematische Funktion gibt die sich nicht mit einer Turing-Maschine abbilden bzw. berechnen läßt.

Ein umfassendes Archiv rund um Brainfuck sowie Compiler und Source-Code findet ihr unter folgender Adresse:

http://esoteric.sange.fi/brainfuck/.


Mattenschwinger
Rookie
Beitrag vom:
24-05-2011, 06:31:31

Brainfuck Compiler

Hey danke für den Artikel hab mich mal damit beschäftigt und einen PHP Brainfuck Interpreter geschrieben.
Wenn es jemanden interresiert:
http://nagelkopf.de/php/php-brainfuck-klasse/

-----------------------------------------------------


no_comment
Professonial
Beitrag vom:
21-04-2005, 14:40:07

Dafür ist ja eigentlich auch der Lektor zuständig ;)

-----------------------------------------------------
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel -- http://pc-intern.com http://straightvisions.com


Floyd
Senior Member
Beitrag vom:
12-04-2005, 00:45:22

RE: Brainfuck

Hi no_comment,

soweit es mir bekannt ist rührt das daher, das der autor selber gemerkt hat wie beschissen schwirig es ist mit dieser sprache ein vernünftiges programm zu schreiben. mehr weiß ich dazu auch net.

wegen den rechtscheibsachen, werd ich bei gelegenheit mal machen! bin da leider nicht sonderlich begabt auf dem gebiet :(

Gruß Floyd

-----------------------------------------------------
Tipp- und Rechtschreibfehler sind absichtlich eingebaut und dienen der Belustigung des Lesers! http://blog.freakfabrik.net


no_comment
Professonial
Beitrag vom:
11-04-2005, 21:55:06

ähem...

Mich würde brennend interessieren, wie der Autor auf den Namen für die Programmiersprache kam.

btw: Nochmal den Artikel durchchecken lassen. Da tun sich rechtschreibliche und grammatikalische Flüchtigkeitsgräuel auf ;)

-----------------------------------------------------
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel -- http://pc-intern.com http://straightvisions.com


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04505
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0