Frage

Kennen Sie ein Beispiel für ein Esoterische Sprache Wird verwendet, um ein praktisches, reales Programm zu schreiben? Gibt es irgendwelche, wie dunkel, Domäne der Informatik, in der eine esoterische Sprache tatsächlich als nützlich für die Lösung eines bestimmten Problems erwiesen wurde?

War es hilfreich?

Lösung

Apps in realer Welt, was?

Das Spiel Verlorenes Königreich gewann den ersten jährlichen Classic 2K Text Adventure Competition im Jahr 2004 und wurde vom ursprünglichen Autor (Re) geschrieben und verbessert in Brainfuck

Wie wäre es mit einem IRC -Bot im Vorfeld oder Dieser Texteditor? Und ich nehme an, wenn Sie gerne in esoterischen Sprachen schreiben, können Sie a in Betracht ziehen C -Compiler vor dem C oder ein Brainfuck zu C Compiler sehr hilfreich...

Andere Tipps

Es gibt keine praktische Verwendung für eine esoterische Programmiersprache, so ziemlich per Definition. Nur weil Sie nicht können verwenden sie, heißt das nicht, dass sie es nicht sind nützlich.

tl; dr:

Wenn Sie sich beispielsweise esoterische Programmiersprachen ansehen, können Sie sie grob in Kategorien einteilen: Einige werden als Witz erstellt, einige werden nur zum Spaß erstellt. Einige werden als Turing -Plane erstellt, aber es gibt auch einige, die erstellt werden, um zu beweisen, oder einen Punkt veranschaulichen. Und diese sind Eigentlich nützlich für genau das: Veranschaulichung eines Punktes, vielleicht in einer Programmiersprachenklasse, vielleicht für die Community oder für die Branche. Obwohl sie für praktische Zwecke nutzlos sind, werden sie verwendetvoll Für Bildungszwecke.

Nehmen Sie nicht deterministische esoterische Programmiersprachen. Dies sind Programmiersprachen, für die die Bewertungssemantik bestimmter Ausdrücke nicht deterministisch definiert sind, sondern beispielsweise probabilistisch oder basierend auf der Mondphase oder ähnlichem. Wenn Sie sich die Definition einer solchen Sprache ansehen, werden Sie sofort denken: "Nun, das ist einfach dumm." Und es ist! (Zum Beispiel ist das Hello World -Programm in Java2k fast eine Seite mit Code, und es wird nicht einmal garantiert, dass "Hallo Welt" jedes Mal, nur die meiste Zeit.) Und doch haben die meisten der heutigen Mainstream -Programmiersprachen Nichtdeterministische Parallelitätsmodelle. Iow: Sobald Sie einen Thread in Java, C#, Python, Ruby, Perl, sogar Erlang oder Clojure beginnen, wird Ihr Programm genauso zufällig wie in der esoterischen Sprache Java2k. Also, warum denken wir, dass einer dumm ist und den anderen als normal akzeptiert, obwohl sie im Wesentlichen dasselbe sind? Durch den Nichtdeterminismus ins Äußerste und die Verpackung von unterhaltsamem Verpacken von Esolangs können wir diese Frage stellen.

Ein weiteres Beispiel sind Turing -Plane. Ein Turing Tarpit ist ein Esolang, der fast keine Merkmale hat, aber immer noch Turing-Vervollständigung ist. Ein solches Turing -Tarpit kann verwendet werden, um zwei verschiedene Dinge zu demonstrieren: Sie können es verwenden, um zu demonstrieren, was genau es ist, was einige Sprachen "kraftvoller" (im Sinne der ausdrucksstarken Kraft) als andere macht. Wenn Sie im Web suchen, werden Sie feststellen, dass die Leute fragen: "Wenn Lisp so viel besser ist als Java, warum zeigen Sie mir dann nicht ein Programm, das Sie in LISP schreiben können, aber ich kann nicht in Java schreiben." Und natürlich ist das dumm: Beide Sprachen sind abgeschlossen, also gibt es kein solches Programm. Wenn Sie Java jedoch mit Brainfuck kontrastieren, können Sie jedoch zeigen, dass dies einfach keine aussagekräftige Frage ist.

Und das andere, was Sie mit Turing -Planen demonstrieren können, ist, dass Sie eine Sprache niemals leistungsfähiger machen können (in beiden Sinnen des Wortes: Rechenleistung und Ausdruckskraft), indem Sie Merkmale entfernen. Es klingt offensichtlich, aber es gibt Menschen, die tatsächlich glauben, dass Microsoft nur den mutablen Zustand von C#entfernen sollte, und es würde auf magische Weise mächtiger werden.

Im Allgemeinen eignen sich Turing -Plane gut, um die Unterscheidung zwischen der Rechenleistung und der ausdrucksstarken Kraft einer Programmiersprache zu demonstrieren.

Andere Möglichkeiten, wie Esolangs nützlich sein können, besteht darin, dass sie als Inspiration für die Programmiersprache dienen können. Denken Sie an Unambda, was, wie der Name schon sagt, eine funktionale Sprache ist, die ist nicht Basierend auf dem Lambda -Kalkül. Mit anderen Worten: Es ist eine funktionale Sprache, die keine Funktionen hat.

Und zu guter Letzt können Esolangs Sie zwingen, ein Problem aus einem völlig anderen Blickwinkel zu betrachten (ja, ich gebe zu, es ist meistens ein unangenehmer Winkel, aber hey, einige Filmregisseure (zum Beispiel Hitchcock) verdanken ihre gesamte Karriere dem Blick auf das Schauen zu in Dingen aus unangenehmen Blickwinkeln) und sie necken dein Gehirn wie ein gutes Rätsel. Das ist zum Beispiel der ganze Grund für die Existenz und der Name von Brainfuck.

Berufssicherheit!!!

Wenn da ein ... ist praktisch Ich benutze eine Sprache, die nicht genannt wird Esoterisch. Die beiden Begriffe schließen sich gegenseitig aus.

Verständnis der Turing -Maschine, Berechnungsfähigkeit und praktischem Eindruck davon, was durch die Rechentheorie impliziert wird. Alle praktischen Vorteile können gesammelt werden, wenn Sie eine esoterische Sprache wie Gehirn **** verwenden.

Ich bin sicher, es gibt auch andere.

Einige Klassen esoterischer Programmiersprachen haben Anwendungen in der theoretischen Informatik.

Turing -Plane Verwendungszwecke zur Veranschaulichung bestimmter Ergebnisse in der Computerbarkeitstheorie und des Stillstörungen. Siehe zum Beispiel die Arbeit von Ianov (Es gibt eine etwas zugänglichere Zusammenfassung auf der Teilung nach unten Dieser Artikel).

Grundlegende Ergebnisse für Klassen von Turing -Maschinen sind eine weitere praktische Anwendung. Zum Beispiel stellt Wikipedia fest, dass P'' war "die erste 'imperative' imperative strukturierte Programmiersprache 'Goto-Less', die sich nachgewiesen hat.

Binäre Kombinationslogik ist ein nützliches Instrument zur Analyse Kolmogorov -Komplexität.

Inspiriert von diese Frage, Und seine Antwort habe auch ich eine praktische Verwendung für eine solche Sprache gefunden: Golfskript, eine Sprache, die speziell für Codegolf entworfen wurde:

Golfscript ist eine stapelorientierte esoterische Programmiersprache, die darauf abzielt, Probleme (Löcher) in so wenigen Tastenanschlägen wie möglich zu lösen. Ziel ist es auch, einfach und leicht zu schreiben.

Dort hast du es, direkt von den Leuten, die es geschrieben haben. Obwohl es fraglich sein mag, ob Code -Golf eine praktische Angelegenheit ist oder nicht, ist mein persönlicher Überzeugung, dass es so nah an etwas kommt, das Sie und ich tatsächlich schreiben und begegnen könnten, ganz zu schweigen davon, dass es eine lustige Programmierübung und eine Konkurrenz ist mit vielen Fans. Also ... wenn Spiele, Fußball und alle möglichen anderen unterhaltsamen Aktivitäten in der einen oder anderen Weise ... praktisch ... Ich fühle mich frei, auch Code -Golf einzubeziehen :)

Der einzig praktische Vorteil, den ich sehe, ist, dass Sie, wenn Sie Code in einer esoterischen Sprache schreiben, Sie auf neue und interessante Weise über Probleme nachdenken können. Das Erlernen neuer Wege zum Angehen von Problemen wird auch dann davon profitieren, wenn Sie wieder in einer Mainstream -Sprache programmieren.

Letztes Jahr habe ich Charles Petzolds 'kommentierte Turing' gelesen. Ich habe sicherlich keine Absicht, jemals eine Turing -Maschine zu programmieren, zumindest wie er es beschreibt. Aber nach dem Nachdenken über die Lösung von Problemen mit seiner „Sprache“ streckte meinen Geist aus. Ich bin ein besserer C# -Programmierer dafür.

Sicher; Pilz, der IRC -Bot: http://zem.fi/~fis/fungot.b98.txt

Die Entwicklung der esoterischen Sprache ist wie das Erstellen Mandala. Nach dem Ende der Arbeit können Sie es vergessen oder sogar zerstören.

Wenn Sie nur nach beurteilen Der Wikipedia -Link:

Eine esoterische Programmiersprache (manchmal für Esolang verkürzt) ist eine Programmiersprache, die als Test für die Grenzen des Computerprogrammiersprachendesigns, als Beweis für das Konzept oder als Witz entwickelt wurde. Es gibt normalerweise keine Absicht, dass die Sprache für die reale Programmierung übernommen wird.

dann, nein, Es gibt keine praktische Anwendung einer solchen Sprache auf ein echtes Problem.

Die Gründe sind keine Beleidigungen für die Sprachen, sie konzentrieren sich auf "praktische":

  1. Wenn Sie in der Praxis ein Problem lösen, müssen Sie sich selbst davon überzeugen können, dass Sie es gelöst haben. Wenn Sie eine Sprache verwenden, die speziell für schwer zu lesen entwickelt ist, wird es schwierig sein, Ihre Lösung visuell zu inspizieren und zu sagen: "Ja, das ist richtig."
  2. In der Praxis arbeiten Sie nicht in einem Vakuum. Im wirklichen Leben arbeiten Sie immer mit einer Reihe von anderen Menschen ungleich Null (auch wenn Sie nur in der Zukunft sind). Jemand anderes muss Ihre Lösung beibehalten, hier eine Funktion hinzufügen, dort ein Problem behoben oder, schlimmer noch, zu dokumentieren, was Sie getan haben und warum.
  3. Wenn weder 1 noch 2 gelten, haben Sie eine Lösung für ein Problem erstellt, das (a) trivial leicht zu inspizieren ist, und (b) muss niemals Wartung erforderlich sind, da es in der Praxis nie verwendet wird. Es ist daher ein triviales / nicht-praktisches Problem.

Coloreforth ist sehr mächtig und es praktisch.

Okad und GA4 in 290k

Code Verschleierung ist eine sehr häufige praktische Verwendung :-P

Und ich weiß nicht, ob die APL/J/K -Familie esoterisch genannt werden könnte, aber sie wurden aus langer Zeit in Produktionssystemen verwendet.

Es gibt eine Sprache namens Pilot. Es ist eine interpretative Sprache, die in Dartmouth Basic (eine interPepective Sprache) geschrieben wurde. Die erste Verwendung war, dass nicht programmierende Lehrer ihre Tests programmieren können. Alle Befehle in der Sprache sind einzelne Buchstaben und der verwendete Brief definiert, welche Optionen verfügbar sind. Es ist uralt (ich habe es 1976 gelernt) und soweit ich das beurteilen kann, hat keine Verwendung mehr.

Je minimaler, desto minimaler kann als (schwarze Boxen)/(Sandbox -Algorithmussprachen) für algorithmische Suchvorgänge verwendet werden, um Verwendung von Suchanwendungen wie z. B. basierende Programmier- und sich entwickelnde Lösungen zu verwenden.

Diese Antwort befasst sich mit 3 Arten von esoterischen Programmiersprachen:

  • Golfsprachen
  • Turing -Plane
  • Sprachen in Spielen

Golfsprachen sind nützlich, wenn Sie für eine einmalige Verwendung etwas zusammenhacken müssen. Anstatt ein 100-Zeilen-Python-Programm zu skript oder einen Debugging-Spree durchzuführen, weil Sie einen Fehler bei etwas gemacht haben, das in einer Golfsprache eingebaut ist, verbinden Sie einfach ein paar gebaute und erledigen Sie den Job schneller.

Turing -Plane sind nützlich für Kreativität. Sie müssen mit den wenigen Befehlen, die die Turing -Planen haben, außerhalb des Tellerrettes denken. Wie würden Sie in BF die Ganzzahlen über das Programm (die nur ein Haufen ASCII -Werte sind) in etwas umwandeln, das Sie bearbeiten können (wie ein einzelner Zellwert)? Wie würden Sie nach Gleichheit suchen? Wie würden Sie zwei Zahlen hinzufügen?

Turing -Plane sind auch für das Praktizieren von Codeorganisationen nützlich. Wenn eine einfache Aufgabe wie das Hinzufügen von zwei Zahlen Sie zum Erstellen von Psuedo -Code und zum Layout des gesamten Programms erfordert, müssen Sie Ihr Programm organisieren. In BF, um zwei Zellwerte hinzuzufügen, müssten Sie: 1. Dekrementieren Sie die erste Zusatz 2. Inkrementieren Sie die zweite Addend 3. Schleife, bis der erste Addend leer ist.

Sprachen in Spielen sind nützlich, um die Erfahrung in Welten/Levels für Spieler dieser Welt/Ebene zu verbessern. In Roblox (obwohl ich es nicht als "esoterische" Skriptsprache nennen würde), würde es Spaß machen, wenn Sie nur einige Teile und Modelle in Ihrer Welt einfügen? Nein. Wenn Sie diese Models geschrieben haben, um Sie zu bekämpfen und sich mit einer Waffe auszurüsten? Vielleicht. Im Geometrie -Dash können Sie das Niveau erschweren, indem Sie in seiner "Programmiersprache" auf einige Male klicken oder in einem Bosskampf Pseudo -Zufallsangriffe verwenden. Esoterische Programmiersprachen in Spielen können den Bereich der Möglichkeiten in einem Niveau/einer Welt erheblich verbessern.

Eiffel, Erlang, Ocaml, Haskell. Dies sind alle "Nischen" -sprachen für die meisten Programmierer da draußen, aber sie sind in ihren Bereichen praktisch. Ihre Frage macht einfach keinen Sinn, es könnte gut gefragt werden: "Gibt es gute Sprachen, die wir in beliebten Problemdomänen nicht verwenden?"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top