Mystical
(suberic.net)- 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/endusw. 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
/namein 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_bankhinzugefügt werden - Das Design muss in ein 1-Unit-Quadrat passen (Koordinatentransformation ist möglich)
- Bei Verwendung von
nstrokeist 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
defwerden 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_ligatureusw. 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
Diese Seite wurde am 2025-05-16 von Denis erstellt
1 Kommentare
Hacker-News-Kommentare