PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schon mal was von Brainfuck gehört?


Fattyman
2018-10-26, 21:03:32
Viele würden diese Programmiersprache zu den esoterischen Programmiersprachen zählen. Besteht sie doch aus nur 8 Zeichen.
Sie basiert auf einer Speicherzellengestützten Architektur. Ein Programm enthält Anweisungen, die Speicherzellen manipulieren. Dabei können folgende Operationen durchgeführt werden:

+ Erhöht den Inhalt der aktuellen Speicherzelle um 1
- Vermindert den Inhalt der aktuellen Zelle um 1
> mache die nachfolgende Zelle zur aktuellen Zelle
< mache die vorhergehende Zelle zur aktuellen Zelle
[ ist der Inhalt der aktuellen Zelle nicht 0 führe alle nachfolgenden Anweisungen bis zum ] aus ansonsten springe sofort dorthin
] ist der Inhalt der aktuelle Zelle nicht 0 springe zum [ zurück ansonsten führe die nachfolgenden Instruktionen aus
. Schreibe den Inhalt der aktuellen Zelle aus (Der Inhalt ist dabei als ASCII-Code aufzufassen)
, Lese ein Zeichen von der Eingabe in die aktuelle Zelle ein (als ASCII-Wert)

Alle übrigen Zeichen eines Quelltextes werden ignoriert.

Kurze Einführung? Hier ein paar kleine Beispiele:
+ der Wert der aktuellen Zelle wird um 1 erhöht
++++ der Wert wird um 4 erhöht
++>+++ der Wert der aktuellen Zelle wird um 2 und der der nachfolgenden Zelle um 3 erhöht
++[->+++<] wenn die aktuelle Zelle am Anfang den Wert 0 hatte wird der Wert der nachfolgenden Zelle um 2 * 3 oder auch 6 erhöht
[-] ziehe solange 1 von der aktuellen Zelle ab, bis der Wert der Zelle 0 ist. Umgangssprachlich r0=0
[->+<] Erhöhe den Wert der nachfolgenden Zelle um den Wert der aktuellen Zelle.
[->+>+<<] Verschiebe den Inhalt der aktuellen Zelle in die beiden nachfolgenden Zellen

Nachfolgend ein Beispielquelltext, der eine bestimmte Operation durchführt. Erratet mal welche?
0
[-] > 1 [-] > 2 [-] > 3 [-] <<< 0
+++ > 1
++++ < 0
repeat following as long as r0 is not 0
[
r0 = r0 - 1 > 1
move content of r1 to r3
[
r1 = r1 - 1 > 2
r2 = r2 + 1 > 3
r3 = r3 + 1 << 1
]
>> 3
move back content of r3 to r1
[
r3 = r3 - 1 << 1
r1 = r1 + 1 >> 3
]
<<< 0
]

konkretor
2018-10-27, 03:25:22
https://de.wikipedia.org/wiki/Brainfuck


#alt

Monger
2018-10-27, 10:20:25
Gibt unzählige esoterische Sprachen, manche davon sogar nützlich.

https://de.m.wikipedia.org/wiki/LOLCODE

https://de.m.wikipedia.org/wiki/Shakespeare_Programming_Language

Rooter
2018-10-27, 13:16:03
[x] alt

Erinnert mich immer ein wenig an eine Turingmaschine.

MfG
Rooter

Mosher
2018-10-27, 15:23:47
[x] alt

Erinnert mich immer ein wenig an eine Turingmaschine.

MfG
Rooter
Ruti, könnte das vielleicht daran liegen, dass... :D

Müllers Ziel war es, eine einfache Turing-vollständige Sprache zu entwerfen, welche mit einem möglichst kleinen Compiler übersetzt werden konnte

Rooter
2018-10-27, 15:44:32
Ruti, könnte das vielleicht daran liegen, dass... :D

Müllers Ziel war es, eine einfache Turing-vollständige Sprache zu entwerfen, welche mit einem möglichst kleinen Compiler übersetzt werden konnteTuring-vollständig sind ja viele Sprachen, das meine ich aber nicht. ;)

MfG
Rooter

Mosher
2018-10-27, 15:53:57
Turing-vollständig sind ja viele Sprachen, das meine ich aber nicht. ;)

MfG
Rooter

Naja, wenn der Compiler möglichst klein sein soll, heißt das für mich, dass die Semantik der Eingabesprache schon relativ nah an der Zielsprache sein muss.

Im Wiki stehen ja noch weitere Hinweise darauf, dass sich Brainfuck an einer direkten Implementierung einer Turingmaschine orientiert.

Rooter
2018-10-27, 15:59:18
Es erinnert mich an eine Turingmaschine wegen des wanderns von Speicherzelle zu Speicherzelle.

MfG
Rooter

Mosher
2018-10-27, 15:59:49
Ja, auch das steht da drin.

Ein Brainfuck-Programm ähnelt stark der formalen Definition einer Turingmaschine. Statt eines Lese-/Schreibkopfes auf einem Band, Zuständen, sowie einem frei definierbaren Alphabet werden jedoch im Sinne einer iterativen Programmiersprache ein Zeiger auf ein Datenfeld, Schleifenkonstrukte und eine rudimentäre ALU verwendet.

Fattyman
2018-10-27, 19:33:20
Bisher nur viel Theorien hier...
Meine letzte Frage wurde aber noch nicht beantwortet...
Was macht das abgedruckte Programm denn nun?

Ectoplasma
2018-10-28, 01:17:35
Turing-vollständig sind ja viele Sprachen, das meine ich aber nicht. ;)

MfG
Rooter

Welche ist denn nicht Turing-vollständig? Und wozu braucht man diese? Würde mich ja mal interessieren.

Mosher
2018-10-28, 02:12:58
Bisher nur viel Theorien hier...
Meine letzte Frage wurde aber noch nicht beantwortet...
Was macht das abgedruckte Programm denn nun?
3*4, ist ja nicht so, als wäre das durch die Kommentare vollkommen witzlos.

Monger
2018-10-28, 08:50:06
Welche ist denn nicht Turing-vollständig? Und wozu braucht man diese? Würde mich ja mal interessieren.
Der passende Wikipedia Artikel nennt reguläre Ausdrücke als Beispiel. Aber ich denke, viele domänenspezifische Sprachen fallen da auch drunter, Gherkin zum Beispiel.

Fattyman
2018-10-28, 08:51:31
3*4, ist ja nicht so, als wäre das durch die Kommentare vollkommen witzlos.

Ah, da sprach der Programmierprofi.
Kommentare... Vollkommenn... Witzlos...
Dein Leitspruch scheint „Kommentare sind was für Weicheier“ zu sein...
In diesem Falle sind die Kommentare selbst Bestandteil des ausgeführten Codes.
Brainfuck kann in seiner „nativen“ Form kryptisch und sehr schwer zu lesen sein, Aber sinnvolle Erweiterungen des Quelltextes - als eingestreute „Kommentare“ - erhöhen die Verständlichkeit enorm. Nichts desto trotz kann ein Brainfuck-Programm auch stefanografisch in einem normalen Text „versteckt“ werden.

transstilben
2018-10-28, 09:45:27
Bisher nur viel Theorien hier...
Meine letzte Frage wurde aber noch nicht beantwortet...
Was macht das abgedruckte Programm denn nun?

Hello world ausgeben

Mosher
2018-10-28, 10:10:19
Ah, da sprach der Programmierprofi.
Kommentare... Vollkommenn... Witzlos...
Dein Leitspruch scheint „Kommentare sind was für Weicheier“ zu sein...
In diesem Falle sind die Kommentare selbst Bestandteil des ausgeführten Codes.
Brainfuck kann in seiner „nativen“ Form kryptisch und sehr schwer zu lesen sein, Aber sinnvolle Erweiterungen des Quelltextes - als eingestreute „Kommentare“ - erhöhen die Verständlichkeit enorm. Nichts desto trotz kann ein Brainfuck-Programm auch stefanografisch in einem normalen Text „versteckt“ werden.

Darum geht's doch nicht, sondern um die Beantwortung deiner Frage, was der Code denn nun macht.
Ohne Kommentare wäre es eine echte Aufgabe und man müsste sich mit der Sprache auseinandersetzen, mit Kommentaren käme meine Oma auf das Ergebnis.

Dein "Quelltext" ist generell mehr Kommentar als Code. Denkbar ungeeignet für Rätselraten.

Selbstverständlich spreche ich mich nicht gegen die Verwendung von Kommentaren aus. Vielmehr unterstreiche ich eigentlich den Nutzen von Kommentaren mit meiner Aussage.

Marscel
2018-10-28, 14:39:22
Brainfuck ist doch NodeJS-driven-Web-Development.

Die hier genannte Sprache ist doch nur ne nette kleine Syntax, eine gewisse Vereinfachung gegenüber Turing-Maschinen-Programmierung, was man so an der Uni vielleicht mal machen musste.

Rooter
2018-10-28, 15:19:38
Welche ist denn nicht Turing-vollständig? Und wozu braucht man diese? Würde mich ja mal interessieren.SQL fällt mir da spontan ein.

MfG
Rooter

Baalzamon
2018-10-28, 16:27:43
SQL fällt mir da spontan ein.

MfG
Rooter
SQL ist Turing vollständig.

Mir würde aus dem Kopf keine Sprache einfallen, die nicht Turing vollständig wäre (obwohl es diese bestimmt gibt).

Rooter
2018-10-28, 16:57:44
SQL ist Turing vollständig.Okay
Das ursprüngliche SQL war keine Turing-vollständige Programmiersprache, es ermöglichte also nicht die Realisierung von beliebigen Computerprogrammen. Mittlerweile lässt es sich mit anderen Programmiersprachen kombinieren, um eine Programmierung im engeren Sinne zu ermöglichen.


MfG
Rooter

Baalzamon
2018-10-28, 17:22:50
Okay

MfG
Rooter

Interessant, aber ich bezog mich auf CTEs in SQL (zumindest ist es das, was ich vor hundert Jahren mal in der Uni gelernt habe) und die sind seit SQL99 Standard. Wenn du SQL92 meinst, das war damals noch nicht Turing complete. =)

Exxtreme
2018-10-30, 10:59:12
Mir würde aus dem Kopf keine Sprache einfallen, die nicht Turing vollständig wäre (obwohl es diese bestimmt gibt).
Ich glaube, HTML-Programmierer kennen sich mit Nicht-Turing-vollständigen Programmiersprachen aus.

Ansonsten beschde:

https://github.com/lhartikk/ArnoldC

Brillus
2019-06-19, 22:21:46
Bisher nur viel Theorien hier...
Meine letzte Frage wurde aber noch nicht beantwortet...
Was macht das abgedruckte Programm denn nun?

Kenn jetzt keinen Namen, aber es gibt welche für hochkritische Systeme, bei denen keine unbegrenzten Schleifen/ Rekursionen u.ä. möglich sind.

Sinn ist das die Entscheidbar sind und somit auch sicher formell verifizierbar.

Gast
2019-06-20, 09:16:07
manche davon sogar nützlich

Welche und wofür? Ernst gemeinte Frage. Meinst Du, im Sinne von didaktisch nützlich?


Mir würde aus dem Kopf keine Sprache einfallen, die nicht Turing vollständig wäre

Ja, aber das liegt wohl daran, dass wir nicht-Turing-vollständige Programmiersprachen gar nicht als Programmiersprachen bezeichnen, HTML zum Beispiel. Oder umgekehrt: Alles, was wir als Programmiersprachen bezeichnen, bezeichnen wir v.a. deswegen als solche, weil es Turing-vollständig ist.

Mr. Lolman
2019-06-20, 11:58:55
"99 bottles of beer" in esoterischen Sprachen: http://www.99-bottles-of-beer.net/toplist_esoteric.html :biggrin:


Nette Spielerei, aber in C# z.B. wär das ein Einzeiler mit ~300 Zeichen...

Benutzername
2019-06-20, 21:47:26
Ich bevorzuge whitespace, wegen der Tintenersparnis beim Ausdruck!

Monger
2019-07-13, 09:51:38
Welche und wofür? Ernst gemeinte Frage. Meinst Du, im Sinne von didaktisch nützlich?

Naja, Python ist ne exotische Sprache. War ursprünglich ja nur als Witz gemeint, Strukturelemente nur mit Einrückungen zu machen.
Bin nicht ganz sicher was meine Meinung vor einigen Wochen war :ugly:, aber ich sehe da vor allem akademischen Wert. Indem man Konventionen bricht, lernt man welche Konventionen verändert werden sollten und welche nicht.

Monger
2019-07-13, 19:06:41
Ich finde z.B. Shakespeare schon sehr spannend. Da werden unfassbar viele Schlüsselworte für den selben Befehl verwendet, also genau das was man normalerweise sorgsam vermeidet.
Aber je nach Kontext ist eben ein anderer Ausdruck fur das selbe angebracht. Das ist bei natürlicher Sprache ja ähnlich.

Daraus kann man schon was lernen. Und manche Sprache erlauben ja aus eben diesem Grund auch Aliase. Wäre interessant mal ne vollwertige Programmiersprache zu sehen, die das ausreizt.