Dies ist eine alte Version des Dokuments!
brainfuck auf dem Portfolio mit Prainfucked
Die Sprache brainfuck
Die Programmiersprache brainfuck (auch bekannt als bf oder brainf*) ist wohl eher einer experimentelle Sprache, als eine Programmierpsrache, mit der man gerne komplexe Anwendungen entwickeln möchte. Dies liegt insbesondere an den fehlenden Möglichkeiten der Programmstrukturierung und an den eingeschränkten E/A Möglichkeiten. Die Beschränkung der Sprache auf nur acht verschiedene Befehle trägt auch nicht sonderlich zu einer einfachen Umsetzung von Funktionalität in Programmcode bei.
Trotzdem hat sich brainfuck weltweit einen Namen machen können, als eine Sprache mit ganz besonderem „Charme“ und nicht zuletzt auch als geistige Herausforderung bei Freizeitprogrammierern und Informatikern.
Alle Befehle werden in einer Art „virtueller Maschine“ ausgeführt. Diese besteht aus einer (theoretisch unbegrenzten) Anzahl von Speicherzellen. Außerdem gibt es einen Pointer, der immer auf eine dieser Speicherzellen zeigt.
Die Befehle im Überblick:
- < verschiebt den Pointer eine Speicherzelle nach links
- > verschiebt den Pointer eine Speicherzelle nach rechts
- + erhöht den Wert der aktuellen Speicherzelle um Eins
- - verringert den Wert der aktuellen Speicherzelle um Eins
- [ der Code bis zur nächsten ] wird nur ausgeführt, wenn die aktuelle Speicherzelle ungleich Null ist
- ] springt zurück zur zugehörigen [
- . gibt die aktuelle Speicherzelle aus (in ASCII Kodierung)
- , ließt ein Zeichen in die aktuelle Speicherzelle ein
Auch wenn es auf den ersten Blick etwas schwer vorstellbar ist, so konnte man doch zeigen, dass brainfuck Turing-komplett ist. Es lassen sich die grundlegenden logischen Operationen durchführen und somit alle Berechnungen ausführen, die mit heutigen Computern möglich sind (entsprechend viel Speicher vorausgesetzt).
Der Compiler Prainfucked
Prainfucked ist eine von Daniel Mewes eigens für den Portfolio angepasste Version des Brainfuck Compilers Brainfucked. Der Compiler ist kompiliert weniger als ein Kilobyte groß. Er unterstützt eine grundlegende Syntaxprüfung und optimiert den brainfuck Quellcode in Hinsicht auf Codegröße und Geschwindigkeit.
Prainfucked wird mit vollständigem Quellcode (Assembler, GNU GPL lizensiert) angeboten und kommt in zwei verschiedenen Versionen: Dem Compiler „pfd.com“, der in die erzeugten Programme eine Laufzeitprüfung einbettet, die verhindert, dass die reservierten brainfuck Speicherzellen (22000 zu je ein Byte) verlassen werden. Andernfalls könnte es auf dem Portfolio zu einer Beschädigung der C: Ramdisk kommen. Der Compiler „pfd-nb.com“ (nb = No Boundary checking) verzichtet auf diese Überprüfung und erhöht somit bei gut geprüften Programmen die Ausführungsgeschwindigkeit. Ein durchschnittliches brainfuck Programm läuft damit rund doppelt so schnell ab.
Das Archiv enthält außerdem noch einige freie Beispielprogramme, zum Beispiel zur Berechnugn von Primzahlen oder zur Faktorisierung natürlicher Zahlen.
Die im Moment aktuelle Version 1.1.1 kann unter http://danielmewes.dnsalias.net/~daniel/pf heruntergeladen werden.
— Daniel Mewes 24/10/2006 20:25