3 Punkte von GN⁺ 2025-05-18 | 1 Kommentare | Auf WhatsApp teilen
  • Mystical ist ein einzigartiger Ansatz, PostScript-Programme in Form von magischen Kreisen zu visualisieren
  • Programmstrukturen werden als Ringe dargestellt; es gibt verschiedene Typen wie ausführbare Arrays, nicht-ausführbare Arrays und Dictionaries
  • Über spezielle Symbole namens Sigillen werden Befehle, Variablen, Zeichenketten usw. auf originelle Weise dargestellt
  • Für Definitionsmuster und Funktionsdeklarationen gibt es eine eigene Darstellung mit Ligaturen, außerdem werden benutzerdefinierte Sigillen unterstützt
  • Derzeit ist es ein Werkzeug zur Umwandlung von PostScript-Programmen in grafische Bilder; ein eigener Interpreter existiert nicht

Überblick über Mystical

Mystical ist ein experimentelles Projekt mit dem Ziel, eine Programmiersprache nach dem Vorbild magischer Kreise zu schaffen. Tatsächlich handelt es sich um eine Methode, PostScript-Code visuell in Form eines magischen Kreises darzustellen; in diesem Dokument wird diese Methode als „Mystical“ bezeichnet.

Ring-Struktur

  • Die Struktur von Mystical basiert auf der Form von Ringen
  • Jeder Ring enthält Buchstaben und Sigillen und hat eine innere und eine äußere Begrenzungslinie
  • Der Hauptring eines Programms beginnt rechts (auf 3 Uhr) und verläuft gegen den Uhrzeigersinn (widdershins). Das spiegelt die Winkelregeln von PostScript sowie die Vorstellung wider, dass magische Kreise von außen nach innen geschrieben werden
  • Untergeordnete Ringe beginnen am Berührungspunkt des übergeordneten Rings

Drei Arten von Ringen

  • Ausführbares Array (Executable array): Entspricht {} in PostScript. Mit schlichter kreisförmiger Innen- und Außenbegrenzung sowie Sternform; für Anfang/Ende werden auf alchemistischen Symbolen basierende Zeichen verwendet
  • Nicht-ausführbares Array (Non-executable array): Entspricht [] in PostScript. Ohne Sternform, mit Dreiecken für Anfang/Ende
  • Dictionary: Entspricht <<>> in PostScript. Polygonale Form mit doppelter äußerer Begrenzung und einfacher innerer Begrenzung. Anfangs-/Endmarkierung identisch

Wenn innerhalb eines Rings weitere Strukturen enthalten sind, werden sie mit kleinen Punkten oder Linien verbunden, um die Hierarchie visuell darzustellen

Einschränkungen bei der Verwendung von PostScript

  • In PostScript können [ ] oder << >> auf eine Weise verwendet werden, die nach den Regeln von Mystical nicht zulässig ist; daher wird davon abgeraten
  • gsave/grestore, begin/end usw. werden häufiger für unausgeglichene Strukturen verwendet und daher als normale Sigillen behandelt

Text und Sigillen

  • Auf dem Ringrand werden Buchstaben oder Sigillen (spezielle Symbole) angeordnet
  • Sigillen stehen für Operatoren, Variablen und Schlüsselwörter
  • /name in PostScript wird als Name oder Sigille in einem Dreieck dargestellt, Zeichenketten () als Schriftrollenform

Standard-Sigillen

  • Für viele eingebaute Operatoren gibt es eigene Sigillen
  • Das Design orientiert sich meist an den Initialen des Befehls, an einer bildhaften Darstellung des Konzepts oder an einer visuellen Symbolsprache

Beispiele: dup, copy, add, mul, neg, for, forall, repeat, if, ifelse, eq, ne, ge, gt, le, lt, moveto, lineto, arc, arcn, curveto, closepath, stroke, fill, gsave, grestore, translate, scale, rotate, setmatrix, currentmatrix, setrgbcolor, currentrgbcolor, setcmykcolor, currentcmykcolor, sethsbcolor, currenthsbcolor, setgray, currentgray, dict, begin, end, def, get, put, length usw.

Benutzerdefinierte Sigillen

  • Für neue Funktionen oder Namen können zur Laufzeit Einträge zu sigil_bank hinzugefügt werden
  • Das Design muss in ein 1-Unit-Quadrat passen (Koordinatentransformation ist möglich)
  • Bei Verwendung von nstroke ist derselbe Schriftstil wie bei bestehenden Sigillen möglich
  • Sigillen für benutzerdefinierte Variablen können auf unterschiedliche Weise erstellt werden, etwa durch Überlagerung von Buchstaben oder verschiedene visuelle Symbolsprachen
  • Neue Namen auf Basis offizieller Operatoren können mit Standard-Sigillen kombiniert werden

Ligatur für /name { ring } def

  • Für häufig verwendete Muster wie Funktionsdefinitionen gibt es spezielle Sigillen
  • Unter dem Namensdreieck wird nur eine Verbindungslinie dargestellt; eine separate def-Sigille entfällt
  • Dies gilt für alle drei Ringtypen
  • Andere Verwendungen von def werden als normale Sigille behandelt
  • Die Ligatur wird nur innerhalb ausführbarer Arrays angewendet; innerhalb eines Dictionaries wird sie wegen möglicher Verwirrung nicht angeboten

Beispielalgorithmen

Die Abbildung oben zeigt ein Beispiel für Quicksort

Es gibt auch ein Beispiel für den Euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers (GCD). Dieses Beispiel nutzt die benutzerdefinierte Funktion /arg {exch def} def

Funktionen zur Erzeugung von Mystical-Bildern

Alle sind in "mystical.ps" definiert

  • mystical: Nimmt ein Array, ein ausführbares Array oder ein Dictionary entgegen und visualisiert rekursiv auch die innere Struktur. Das gesamte Bild wird so skaliert, dass es in einen Einheitskreis passt
  • mystical_evoke: Nimmt einen Namen entgegen, sucht ihn im aktuellen Dictionary und rendert ihn wie oben beschrieben
  • mystical_evoke_label: Fügt die Name-def-Ligatur hinzu und richtet die Namens-Sigille so aus, dass sie vertikal erscheint

Zu diesen Funktionen gibt es auch _unscaled-Versionen. In diesem Fall ist keine Skalierung möglich, daher werden die Ringe sehr groß ausgegeben

Layout-Probleme

  • Der aktuelle Code optimiert die Platzierung untergeordneter Kreise so, dass Kollisionen vermieden werden, ist dabei aber konservativ, wodurch das Layout zu weit auseinandergezogen wird
  • In den Beispielabbildungen werden nach dem Parsen und Layout mit mystical_get_spell, mystical_make_evocation_ligature usw. die Bilder mit den Funktionen draw_sigil und draw_link manuell angepasst und ausgegeben
  • Künftig sollen die Standardwerte für das Layout verbessert werden

Mystical als Programmiersprache

  • Derzeit ist Mystical ein Werkzeug zum Zeichnen von PostScript-Programmen
  • Es gibt keinen Interpreter, der Mystical-Bilder selbst interpretiert und ausführt
  • Menschen lesen die Bilder, um den PostScript-Code zu verstehen, oder schreiben ihn als PostScript-Programm zur Ausführung neu
  • Sprachtheoretische Diskussionen werden auf später verschoben

Möglichkeit der Anwendung auf andere Sprachen

  • Für Sprachen, die wie FORTH nur aus Operatoren bestehen, gibt es großes Potenzial
  • Bei Sprachen mit komplexerer Struktur besteht die Gefahr, dass zu viele Ringe nötig werden

Auf GitHub herunterladen


Auf Codeberg herunterladen


Diese Seite wurde am 2025-05-16 von Denis erstellt

1 Kommentare

 
GN⁺ 2025-05-18
Hacker-News-Kommentare
  • Eindruck, der an den japanischen Anime Dennō Coil erinnert; erwähnt wird eine Szene, in der Kinder Programme fast genau wie der Autor auf den Boden zeichnen und sie wie Magie wirken lassen; starke Empfehlung
    • Teilt den Eindruck, dieses Werk wirklich geliebt zu haben; es zeige sehr gut, wie Kinder neue Technologien anders als Erwachsene annehmen, und sei mit dieser visionären Inszenierung sogar 5 Jahre vor Google Glass gewesen
    • Hatte genau denselben Gedanken und lobt es als wirklich großartiges Werk
  • Parodiert mit realistischem Humor Situationen aus Spielen, in denen Magie oder Rituale beschworen werden, mit dem Wunsch: „Ich rufe die Göttin des roten Mondes an, habe den Altar vorbereitet und die Kristalle aufgeladen, also bitte lass es diesmal booten.“
    • Zusätzlicher Ritualwitz, man solle die Kerzen vom Bibelstapel entfernen
  • Eindruck, dies sei eine Programmiersprache, die dem Isekai-Hauptcharakter aus Aphyrs Blogserie „Xing the technical interview“ gefallen würde; empfiehlt, dass sie unbedingt in diese Serie aufgenommen werden sollte, und teilt einen passenden Referenzlink
    • Reaktion, die Serie bisher nicht gekannt zu haben, und Bewertung, dass sie wirklich unterhaltsam sei
  • Empfehlung eines Reddit-Diskussions-Threads über UFOs im Zusammenhang mit dem Reverse-Engineering-Programm von Isaac und Caret, verbunden mit der Aufforderung, tiefer einzutauchen
  • Dieses Werk sei so erstaunlich, dass nach der Lizenz gefragt wird; außerdem die Erwartung, dass ein abgeleitetes Projekt mit einem Forth-Stil, der nur reine Rekursion verwendet, perfekt zu dem Magiesystem passen würde, dem im aktuell entwickelten Spiel die Visualisierung fehlt; Einschätzung, dass Mystical eine Lösung sei, die Magie im Spiel strukturiert und zugleich sowohl die Art des Schreibens durch die Nutzer als auch die Immersion erfüllt
    • Auch im Spiel Noita gebe es ein ähnliches System zum Erstellen von Magie; vorgestellt wird ein Zauberstab-System, bei dem sich Wiederholung, Multiplikation, Duplizierung usw. programmatisch anwenden lassen, zusammen mit dem Steam-Link zum Spiel
  • Zitiert einen Teil des für Perl berühmten Gedichts „Black Perl“ als Beispiel dafür, wie sich magische Rituale und Programmierbefehle auf raffinierte Weise verbinden
  • Meinung, dass diese Programmiersprache tatsächlich recht praktisch sei; bei ästhetisch ausgerichteten Esolangs sei es selten, dass etwas zugleich so gut lesbar und so einfach zu benutzen ist; die Idee könne auch auf Lisp-Arten, stackbasierte und Array-Sprachen angewendet werden; in Verbindung mit einem passenden strukturierten Editor könnte der Code sogar für echte Softwareentwicklung knapp und übersichtlich genug sein
  • Teilt die Erfahrung, PostScript als eine so mächtige Sprache zu empfinden, dass allein die umgekehrte polnische Notation das Denken neu strukturiert; lobt es als erfrischend, dass hier noch eine ästhetische visuelle Ebene hinzukommt
    • Bittet um Empfehlungen für andere ähnliche Sprachen, die das Denken trainieren; würde gern zumindest kurz verschiedene Sprachen wie ps oder lisp kennenlernen
  • Gedanke, dass dieser Ansatz viele Einsatzmöglichkeiten haben könnte, zum Beispiel als hübschere Form von QR-Codes; automatisches Decoding wäre etwas knifflig, aber die Verbindung aus Ästhetik und Logik gefalle sehr
  • Hinweis, dass man für mehr über Chaos Magick und die Grundlagen von Sigillen-Zaubern das Psychonaut Field Manual konsultieren solle