Mystical
(suberic.net)- Mystical ist eine Notation, die PostScript-Programme als kreisförmige Strukturen zeichnet, die wie magische Kreise aussehen; in der Dokumentation wird es wie eine Sprache behandelt, tatsächlich ist es aber eher eine visuelle Darstellung von PostScript
- Die Kernstruktur ist der Ring, wobei ausführbare Arrays
{}, nicht-ausführbare Arrays[]und Dictionaries<< >>durch Umrandungen, Sterne, Dreiecke und Vielecke unterschieden werden - Text am Rand des Rings und Sigillen verwandeln PostScript-Operatoren, Variablen, Schlüsselwörter, Strings und Namen in symbolische oder verzierte Formen
mystical.psrendert Arrays, ausführbare Arrays und Dictionaries als Mystical-Bilder, undmystify.pyumhüllt PostScript-Programme mit einer 8 Zoll breiten Mystical-Zeichnung auf einer 8.5x11-Seite und wandelt auch Kommentare um- Derzeit gibt es keinen Interpreter, der Mystical-Bilder liest und berechnet; Menschen können die Bilder jedoch in PostScript zurückübersetzen und ausführen
Eine Notation, die PostScript wie einen magischen Kreis zeichnet
- Mystical entstand aus dem Ziel, eine Programmiersprache zu erschaffen, die einem magischen Kreis ähnelt
- Tatsächlich ist es eher eine Methode, PostScript so zu schreiben oder zu zeichnen, dass es wie ein magischer Kreis aussieht
- Installations- und Einführungsdokumente werden separat bereitgestellt
Ringbasierte Struktur
- Mystical-Programme bestehen aus Ringen
- Ein Ring ist ein kreisförmiges Band mit innerem und äußerem Rand, in dem Text und Sigillen angeordnet sind
- Der Inhalt des Hauptrings beginnt ganz rechts, also auf 3 Uhr, und verläuft gegen den Uhrzeigersinn
- Das folgt dem Winkelsystem von PostScript und spiegelt auch die Annahme wider, dass der Ring von außen beschrieben wird
- Unterringe beginnen an dem Punkt, an dem sie mit der Struktur verbunden sind, die sie aufgerufen hat
-
Drei Ringtypen
- Ausführbare Arrays entsprechen in PostScript
{ }; sie haben innen und außen einfache kreisförmige Umrandungen und enthalten im Inneren eine Sternform - Anfangs- und Endpunkt ausführbarer Arrays werden mit einem Symbol markiert, das vom alchemistischen Zeichen für „Werk vollendet“ abgeleitet ist
- Nicht-ausführbare Arrays entsprechen in PostScript
[ ]; sie ähneln ausführbaren Arrays, haben aber keine Sternform - Anfangs- und Endpunkte nicht-ausführbarer Arrays werden mit einfachen Dreiecken markiert
- Dictionaries entsprechen in PostScript
<< >>und werden als Vielecke mit doppelter äußerer und einfacher innerer Umrandung dargestellt - Die Anfangs- und Endmarkierungen von Dictionaries sind dieselben wie bei Arrays
- Die Reihenfolge der Einträge in einem Dictionary-Bild kann von der Reihenfolge im PostScript-Text abweichen
- Denn in PostScript bleibt die Einfügereihenfolge in Dictionaries nicht erhalten
- Ausführbare Arrays entsprechen in PostScript
-
Verschachtelte Strukturen und Einschränkungen
- Wenn eine Struktur in einer anderen erscheint, führt vom kleinen Kreis oder Punkt am Einfügepunkt eine Linie zum Start- und Endsigill des Unterrings
- In PostScript können
[ ]oder<< >>auf Arten verwendet werden, die Mystical schwer verarbeiten kann - Formen wie im Beispiel, bei denen Array-Grenzen über Bedingungen oder Verzweigungen hinweg aufgeteilt werden, sollten vermieden werden
- Befehle wie
gsave/grestoreoderbegin/endkönnen unausgeglichen verwendet werden oder Schleifen überqueren und werden daher als gewöhnliche Sigillen behandelt
Text und Sigillen
- Am Rand eines Rings stehen Text oder Sigillen
- Namen, die in PostScript als
/namegeschrieben werden, werden in Mystical als Namens-Text oder Sigill dargestellt, das von einem Dreieck umschlossen oder überlagert wird - PostScript-Strings
()werden als Kartusche dargestellt, die den String-Text enthält -
Standard-Sigillen
- Viele eingebaute Operatoren haben eigene Standard-Sigillen
- Wenn sie als Operator oder Name auftreten, wird statt Text ein Sigill verwendet; innerhalb von Strings gilt das nicht
- Standard-Sigillen werden meist aus dem Anfangsbuchstaben des Befehls und einer bildlichen Darstellung des Konzepts zusammengesetzt; einige verwenden anschaulichere Zeichnungen oder standardisierte visuelle Sprachen
- Die vollständige Liste steht unter Standard Sigils
- Beispielhaft behandelte Operatorkategorien
dup,copy,add,mul,negfor,forall,repeatif,ifelse, Vergleichsoperatorenmoveto,lineto,arc,curveto,stroke,fillgsave,grestore,translate,scale,rotate- Operatoren zum Setzen und Abfragen von Farben
dict,begin,end,def,get,put,length
-
Benutzerdefinierte Sigillen
- Sigillen für neue Funktionen oder Namen können zur Laufzeit zu
sigil_bankhinzugefügt werden - Benutzerdefinierte Sigillen müssen in ein Einheitsquadrat mit Ursprung im Zentrum passen; Koordinatenwerte dürfen 0.5 nicht überschreiten
- Zur Vereinfachung kann das Koordinatensystem transformiert werden
- Wenn statt
strokenstrokeverwendet wird, entsteht derselbe kalligrafische Effekt wie bei Standard-Sigillen - Sigillen für benutzerdefinierte Variablen können nach jedem beliebigen Sigill-System entworfen werden
- Die Beispiele verwenden überwiegend letter collision, inspiriert vom Chaos-Magick-System von Spare
- Auch kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, Bilder, Wortspiele usw. sind möglich
- Neue Namen, die von offiziellen Operatoren abgeleitet sind, können das Standard-Sigill dieses Operators enthalten
- Sigillen für neue Funktionen oder Namen können zur Laufzeit zu
Kombinierte Notation für /name { ring } def
- Für
defgibt es ein eigenes Sigill, aber das Muster, einen Namen zu pushen, eine Funktion zu pushen und diese dann unter diesem Namen zu definieren, kommt häufig vor - Mystical bietet dafür eine spezielle Syntax für die Form
/name { ring } def- Das gewöhnliche Namens-Dreieck wird verwendet
- Das Ende der Verbindungsline liegt direkt unter dem Namen
- Das
def-Sigill entfällt vollständig
- Diese Syntax wurde zur Vereinfachung auch auf die beiden anderen Ringtypen erweitert
- Wenn
defauf andere Weise verwendet wird, bleibt das normaledef-Sigill erhalten - Eine ähnliche kombinierte Notation für
/name { ring }innerhalb eines Dictionaries wurde erwogen, aber nicht übernommen, weil sie leicht falsch verarbeitet werden könnte
Umgang mit Kommentaren
- Kommentare in Mystical werden als kleiner Text in einer unvollständigen Sprechblase dargestellt, die auf einen bestimmten Punkt im Programm zeigt
- Echte PostScript-Kommentare verschwinden, bevor der Mystical-Renderer sie sieht; daher wandelt
mystify.pyKommentare in eine erkennbare Code-Sequenz um - Zum Beispiel wird ein Kommentar wie
% Show a standard message, centered horizontallyin folgende Form umgewandelt(Show a standard message, centered horizontally) /mystical_comment_flag pop pop
- Der Renderer kann dieses Muster erkennen und als Mystical-Kommentar darstellen
Beispielalgorithmen
- Die Abbildung oben auf der Seite zeigt ein Quicksort-Beispiel
- Es ist auch ein Beispiel für den GCD-Algorithmus von Euklid enthalten
- Dieses Beispiel verwendet die Funktion
/arg {exch def} defaus dmmlib
- Dieses Beispiel verwendet die Funktion
Funktionen zur Erzeugung von Mystical-Bildern
- Alle Funktionen sind in
mystical.psdefiniert mystical- Nimmt Arrays, ausführbare Arrays und Dictionaries entgegen und rendert sie in Mystical-Form
- Geht bei Bedarf auch in Unterstrukturen hinab und zeichnet diese
- Das Gesamtbild wird auf den Einheitskreis skaliert
mystical_evoke- Wie
mystical, nimmt aber einen Namen als Eingabe, der im aktuellen Dictionary nachgeschlagen wird
- Wie
mystical_evoke_label- Ähnlich wie
mystical_evoke, fügt oben jedoch eine kombinierte Name-Definitions-Notation hinzu - Das Bild wird gedreht, damit das Namens-Sigill aufrecht erscheint
- Ähnlich wie
- Für alle drei Funktionen gibt es auch Versionen mit dem Suffix
_unscaled- Diese Versionen überspringen den Skalierungsschritt
- Da die Ringdicke 1 Einheit beträgt, werden die Bilder ziemlich groß
- Die Verwendung ist in den Mystical usage notes beschrieben
Programm zur Erzeugung von Mystical-Bildern
- Derzeit wird nur ein einziges Programm bereitgestellt: das Python-Skript
mystify.py mystify.pyerledigt zwei Aufgaben- Es umhüllt ein komplettes PostScript-Programm mit Code, der es als Mystical-Programm zeichnet, und platziert es mittig auf einer 8.5x11-Seite mit 8 Zoll Breite
- Es wandelt PostScript-Kommentarzeilen, die mit
%beginnen, in Mystical-Kommentare um
- Kommentare ganz am Anfang der Datei werden nicht umgewandelt
- Beispiel:
%!PS
- Beispiel:
- Benachbarte Kommentarzeilen mit derselben Einrückung werden als ein langer Kommentar mit Zeilenumbrüchen behandelt
-
Layout-Einschränkungen
- Der aktuelle Code berechnet ein Layout, das Kollisionen zwischen Unterkreisen vermeidet
- Die Berechnung ist übervorsichtig, sodass die meisten Programme sehr weit auseinandergezogen werden können
- Die Seitenbeispiele wurden erzeugt, indem die Parsing- und Layout-Funktionen
mystical_get_spellundmystical_make_evocation_ligatureausgeführt, das Ergebnis anschließend angepasst unddraw_sigilsowiedraw_linkaufgerufen wurden - Das Standard-Layout soll künftig verbessert werden
Kann man es als Sprache betrachten?
- Derzeit ist Mystical eine Methode, PostScript-Programme zu zeichnen
- Es gibt keinen Interpreter, der Mystical-Bilder als Eingabe nimmt und die entsprechende Berechnung ausführt
- Ein Mensch könnte ein Mystical-Bild lesen und ausführen oder, wahrscheinlicher, es zunächst in ein PostScript-Programm zurückverwandeln und dann ausführen
Möglichkeit der Anwendung auf andere Sprachen
- Dieser Ansatz scheint sich auch auf operator-only languages wie Forth anwenden zu lassen
- Für Sprachen mit komplexerer Satzstruktur könnte die Anwendung schwierig sein
- Es ist unklar, ob es zu komplex würde, für jede geschweifte Klammer oder Einrückung einen neuen Ring zu erzeugen
Noch keine Kommentare.