Esoterische Programmiersprache

Eine esoterische Programmiersprache (manchmal verkürzt zu esolang) ist eine Programmiersprache entworfen als ein Test der Grenzen des Computerprogrammiersprache-Designs, als ein Beweis des Konzepts, oder als ein Witz. Es gibt gewöhnlich keine Absicht der Sprache, die für die Hauptströmungsprogrammierung wird annimmt, obwohl einige esoterische Eigenschaften wie Visuospatial-Syntax praktische Anwendungen in den Künsten begeistert haben. Solche Sprachen sind häufig unter Hackern und Hobbyisten populär. Dieser Gebrauch dessen wird gemeint, um diese Sprachen aus populäreren Programmiersprachen zu unterscheiden.

Brauchbarkeit ist selten ein hoher Vorrang für solche Sprachen; häufig gerade das Gegenteil. Das übliche Ziel ist, herkömmliche Spracheigenschaften zu entfernen oder zu ersetzen, während es noch eine Sprache aufrechterhält, die, oder sogar ein Turing-abgeschlossen ist, für den die rechenbetonte Klasse unbekannt ist.

Geschichte

Das frühste, und dennoch war das kanonische Beispiel einer esoterischen Sprache INTERCAL, entworfen 1972 von Don Woods und James M. Lyon mit der festgesetzten Absicht, verschieden von jeder anderen Programmiersprache zu sein, mit der die Autoren vertraut waren. Es parodiert Elemente von feststehenden Programmiersprachen des Tages, wie Fortran, COBOL und Zusammenbau-Sprache.

Frühe Durchführungen von INTERCAL wurden an IBM System/360 und einen unbekannten Computer von Atari (wahrscheinlich Atari 2600) gebunden und haben nicht überlebt. Viele Jahre lang wurde INTERCAL nur durch Papierkopien des INTERCAL Handbuches vertreten. Das Wiederaufleben der Sprache 1990 als eine Durchführung in C unter Unix hat eine Welle von Interesse im absichtlichen Design von esoterischen Computersprachen stimuliert.

1992 hat Wouter van Oortmerssen FALSCH, eine kleine Stapel-orientierte Programmiersprache mit der Syntax geschaffen, die entworfen ist, um den Code von Natur aus zu machen, verfinstert, verwirrend, und unlesbar. Es ist auch beachtenswert, für einen Bearbeiter von nur 1024 Bytes zu haben. Das hat Urban Müller angeregt, eine noch kleinere Sprache, den jetzt berühmten brainfuck zu schaffen, der aus nur acht anerkannten Charakteren besteht. Zusammen mit dem Befunge von Chris Pressey (wie FALSCHER, aber mit einem zweidimensionalen Instruktionszeigestock) ist brainfuck jetzt eine der am meisten gut unterstützten esoterischen Programmiersprachen. Das sind kanonische Beispiele von minimalem Turing tarpits und unnötig verfinsterten Spracheigenschaften; der minimality von brainfuck grenzt an elegantes und reines Sprachdesign; tatsächlich ist es mit dem P  Familie von Maschinen von Turing verbunden.

Esoterische Programmierbegriffe

Turing tarpit

Turing tarpit ist eine Turing-ganze Programmiersprache, deren Zahl von Befehlen, Maschinenbediener oder gleichwertige Gegenstände sehr klein sind. Diese schließen brainfuck (8 Befehle, alle mit 0 operands), OISC (1 Befehl, 3 operands), und Thue (1 Befehl, 2 operands) ein.

Das Drehen tarpit

Ein Drehen tarpit ist Turing tarpit mit einer Stateful-Verschlüsselung, d. h. eine Sprache, auf der Befehle verwendet werden, um von einer begrenzten Reihe von Operationen auszuwählen und diese Operationen auf den aktuellen Staat des Programms anzuwenden. Beispiele schließen Gewissensbisse, Wirbeln und, wohl, INTERCAL ein.

Verschlüsselung von Stateful

Eine Methode, Programme, solch zu verschlüsseln, dass jede Teilkette der Verschlüsselung eine Instruktion zu beiden ist:

  1. Machen Sie die folgende Instruktion in einer Liste und den ausfindig
  2. Wenden Sie es an, um den aktuellen Programm-Staat umzugestalten.

Bemerken Sie, dass eine einzelne Instruktion immer zwei folgende Phasen einschließt: Auswahl einer Operation und Durchführung davon. Die Liste von Operationen kann entweder - als in Gewissensbissen oder THRAT - oder dynamisch - als in reMorse4ever statisch sein.

Hier ist ein Beispiel, das auf Gewissensbissen oder THRAT gestützt ist:

Wählen Sie Folgende Operation in der Liste aus

Führen Sie Operation durch

Sprachparadigma

Das Paradigma einer Sprache kann in mehrere Kategorien fallen, und diese Kategorien werden verwendet, um ein allgemeines Verstehen der Weise zu bekommen, wie eine spezifische Sprache funktioniert. Diese schließen befehlende/despotische Sprachen wie brainfuck ein, in dem Instruktionen beschreiben, wie man Daten ändert; funktionelle Sprachen wie Unlambda, in dem Daten und Code mehr oder weniger austauschbar sind und Ausführung, sind die wiederholte Anwendung von Funktionen zu den Ergebnissen anderer Funktionen; und das Neuschreiben von Sprachen wie Thue, in dem Transformationsfunktionen auf einen anfänglichen Staat angewandt werden.

Funges

Ein funge ist eine esoterische Programmiersprache, die seine Programme als metrische Räume mit Koordinatensystemen (häufig, aber nicht notwendigerweise, Kartesianisch) modelliert, und die Instruktionen durchführt, die an Punkten in ihrem Programm-Raum durch das Bewegen eines Instruktionszeigestocks gelegen sind (ein Positionsvektor, der die zurzeit durchführende Instruktion anzeigt) durch diesen Raum. Verschiedene Instruktionen bestimmen die Richtung, in der sich der Instruktionszeigestock, und folglich, die Folge von Instruktionen bewegt, die durchgeführt wird.

Der aktuelle offizielle Standard für das Verhalten dieser Programmiersprachen ist die Funge-98 Spezifizierung. Diese Spezifizierung ist eine Verallgemeinerung der Semantik der Programmiersprache von Befunge, die eine zweidimensionale toroidal Topologie hat. Sprachen, die nah an diesem Standard, wie Unefunge (eindimensional) und (dreidimensionaler) Trefunge kleben, werden manchmal funges genannt, während mehr "entfernte Verwandte", die sich in der bedeutenden Hinsicht wie Wierd unterscheiden, fungeoids genannt werden.

Nichtdeterministische Sprache

Für eine deterministische Sprache, wenn man der aktuelle Staat eines Programms gegeben wird, kann der folgende Staat immer vorausgesagt werden. Das ist für eine nichtdeterministische Sprache nicht wahr. Die meisten Sprachen sind deterministisch, aber einige Sprachen, wie Befunge, liefern eine eingebaute randomization Instruktion. Außerdem haben Sprachen wie Java2K nur randomized Instruktionen. So ist das Bekommen sogar triviale Programme, eine zuverlässige Produktion zu haben, häufig eine kolossale Aufgabe.

Nichtdeterministische Sprachen können verwendet werden, um große Suchräume wie Grammatiken zu erforschen, wo erschöpfende Suche unpraktisch ist. Zufällige Textgeneratoren wie der Dada Motor und rmutt sind Beispiele dieser Art der nondeterminstic Sprache.

Esoterischer sind nichtdeterministische Algorithmen in der theoretischen Untersuchung der Hyperberechnung verwendet worden.

Internetgemeinschaft

Es gibt eine kleine, aber blühende Gemeinschaft im Internet von Hobbyisten, die in und Design esoterische Programmiersprachen programmieren.

Die esolang Gemeinschaft ist sporadisch, und Themen der Diskussionsreihe von der Debatte betreffs energisch, ob eine Sprache dazu Turing-abgeschlossen ist, wie man über das Darstellen des Auszugs gehen würde und hart sich mathematische Konzepte in einer Programmierumgebung zu vergegenwärtigen. Es gibt eine Adressenliste, aber sie wird fast aufgegeben, und der grösste Teil der Diskussion stößt auf den wiki (sieh unten) oder auf IRC.

Vollständigkeit von Turing ist ein Lieblingsthema der Diskussion, da es nicht sofort offensichtlich ist, ob eine Sprache Turing abgeschlossen ist, und es häufig ziemlich große intuitive Sprünge nimmt, um zu einer Lösung zu kommen. Neue Sprachen mit neuen Eigenschaften werden immer geschaffen, so ist der Beweis der Vollständigkeit von Turing immer eine Herausforderung.

Eine zusammenhängende Verfolgung unter Programmiersprache-Anhängern ist das Schreiben des verfinsterten Codes.

Beispiele

Unten sind einige charakteristische Beispiele von esoterischen Programmiersprachen:

  • LOLCODE wird entworfen, um der Rede von lolcats zu ähneln. Der folgende ist das "hallo" Weltbeispiel:

HAI

KANN, STDIO HABEN?

SICHTBARE "WELT VON HAI!"

KTHXBYE

  • Befunge und seine Sorte erlauben dem Instruktionszeigestock, in vielfachen Dimensionen durch den Code zu wandern. Zum Beispiel zeigt das folgende Programm "Hallo Welt" durch das Stoßen der Charaktere in umgekehrter Reihenfolge auf den Stapel, dann den Druck der Charaktere in einer Schleife, die im Uhrzeigersinn durch die Instruktionen [>], [:], [v], [_], [], und [^] zirkuliert.

"dlroW olleH">: v

^, _@

  • Brainfuck wird für den äußersten Minimalismus entworfen und führt zu verfinstertem Code mit Programmen, die nur 8 verschiedene Charaktere enthalten. z.B die folgenden Programm-Produktionen "Hallo Welt":

++++++++++ [> +++++++> ++++++++++> +++> +

.. +++.> ++.

  • Chef wird entworfen, um Programme wie das Kochen von Rezepten aussehen zu lassen. z.B stößt die folgende Behauptung einen Artikel auf einen Stapel:

Stellen Sie Zimt in die 2. sich vermischende Schüssel

  • FALSCH ist eine Stapel-basierte Sprache mit einzeln-Buchstaben Befehlen und Variablen. Zum Beispiel, 3 + 1 kann durch das Auswerten (λ x  x + 1) (3) berechnet werden:
  • Ein Befehlssatz-Computer ist eine Maschinensprache mit nur einer Operation. Das ist wirklich eine Klasse von Sprachen, weil man solch eine Sprache für jede gegebene Operation definieren kann.
  • Piet ist eine Sehsprache, deren Programme bitmaps sind, die Bildern von Piet Mondrian ähneln.
  • Shakespeare wird entworfen, um Programme wie Shakespearische Spiele aussehen zu lassen. z.B erklärt die folgende Behauptung einen Punkt im Programm, das über eine GOTO-Typ-Behauptung erreicht werden kann:.
  • Whitespace denkt nur das Lay-Out von whitespace und ignoriert alle non-whitespace Charaktere.
  • INTERCAL, der für die "Bearbeiter-Sprache Ohne Aussprechbares Akronym" kurz ist.
  • Malbolge (der 8. Kreis der Hölle) wurde entworfen, um die schwierigste und esoterische Programmiersprache zu sein.

Links

  • Esolang - Ein esoterischen Programmiersprachen gewidmeter wiki.

Listen

Autoren


Stellvertreter / Montage
Impressum & Datenschutz