PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:andere:prainfucked

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 Programmiersprache, mit der man gerne komplexe Anwendungen entwickeln möchte. Dies liegt insbesondere an den fehlenden Möglichkeiten der Programmstrukturierung und an den eingeschränkten Ein- bzw. Ausgabe-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 Zeiger, der immer auf eine dieser Speicherzellen zeigt.

Die Befehle im Überblick:

  • < verschiebt den Zeiger eine Speicherzelle nach links
  • > verschiebt den Zeiger 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 auf die Konsole aus (in ASCII-Kodierung)
  • , liest ein Zeichen von der Konsole 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 von Stefan Partusch. Der Compiler ist kompiliert weniger als ein Kilobyte groß. Er unterstützt eine grundlegende Syntaxprüfung und optimiert den brainfuck-Quellcode in Hinsicht auf Code-Größe und Geschwindigkeit.

Prainfucked wird mit vollständigem Quellcode (für den Netwide Assembler, GNU GPL Version 2-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 (22.000 zu je ein Byte) verlassen werden. Andernfalls könnte es auf dem Portfolio zu einer Beschädigung der RAM-Disk C: 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 Berechnung 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

software/diy/andere/prainfucked.txt · Zuletzt geändert: 26/10/2006 00:10 (Externe Bearbeitung)