Mystical
(suberic.net)- Mystical est une approche originale qui visualise des programmes PostScript sous la forme de cercles magiques
- La structure du programme est représentée sous forme d’anneaux (rings), avec différents types comme les tableaux exécutables, les tableaux non exécutables et les dictionnaires
- Des symboles spéciaux appelés sigils permettent de représenter de manière originale les commandes, variables, chaînes, etc.
- Des ligatures spécifiques sont utilisées pour les motifs de définition ou les déclarations de fonctions, avec prise en charge de sigils personnalisés
- À ce stade, il s’agit d’un outil qui convertit des programmes PostScript en images graphiques ; il n’existe pas d’interpréteur dédié
Aperçu de Mystical
Mystical est un projet expérimental visant un langage de programmation rappelant un cercle magique. En pratique, il s’agit d’une méthode de représentation visuelle de code PostScript sous forme de cercle magique, et ce document désigne cette approche sous le nom de « Mystical ».
Structure en anneaux (Rings)
- La structure de Mystical repose sur des anneaux
- Chaque anneau contient des lettres et des sigils, avec une bordure intérieure et une bordure extérieure
- L’anneau principal du programme commence à droite (à 3 heures) et progresse dans le sens antihoraire (widdershins). Cela reflète les conventions angulaires de PostScript ainsi que l’idée qu’un cercle magique s’écrit de l’extérieur vers l’intérieur
- Les sous-anneaux commencent au point de contact avec l’anneau parent
Les trois types d’anneaux
- Tableau exécutable (Executable array) : correspond à
{}en PostScript. Bordures circulaires simples à l’intérieur et à l’extérieur, avec une forme d’étoile, et des symboles fondés sur des signes alchimiques au début et à la fin - Tableau non exécutable (Non-executable array) : correspond à
[]en PostScript. Pas de forme d’étoile, triangles utilisés pour le début et la fin - Dictionnaire (Dictionary) : correspond à
<<>>en PostScript. Forme polygonale avec double bordure extérieure et simple bordure intérieure. Les marqueurs de début/fin sont identiques
Lorsqu’une autre structure apparaît à l’intérieur d’un anneau, elle est reliée par de petits points ou des lignes, ce qui visualise la hiérarchie.
Limitations liées à l’usage de PostScript
- En PostScript, il est possible d’utiliser
[ ]ou<< >>d’une manière que les règles de Mystical n’autorisent pas ; cet usage est donc déconseillé gsave/grestore,begin/end, etc., sont davantage utilisés dans des structures déséquilibrées ; ils sont donc traités comme de simples sigils
Texte et sigils
- Des lettres ou des sigils (symboles spéciaux) sont placés sur le bord des anneaux
- Les sigils représentent des opérateurs, variables et mots-clés
- En PostScript,
/nameest représenté par un nom ou un sigil dans un triangle, et les chaînes()par une forme de parchemin
Sigils standard
- De nombreux opérateurs intégrés possèdent un sigil propre
- Leur design repose généralement sur l’initiale de la commande, une image du concept ou un langage visuel
Exemples : 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, etc.
Sigils utilisateur
- Pour de nouvelles fonctions ou de nouveaux noms, il est possible d’en ajouter à
sigil_bankà l’exécution - Ils doivent être conçus dans un carré de 1 unité (avec transformations de coordonnées possibles)
- En utilisant
nstroke, on peut obtenir le même effet de trait que les sigils existants - Les sigils de variables utilisateur peuvent être créés de diverses façons (superposition de lettres, langages visuels variés, etc.)
- Les nouveaux noms basés sur des opérateurs officiels peuvent être combinés avec des sigils standard
Ligature /name { ring } def
- Un sigil spécial est fourni pour les motifs fréquemment utilisés dans les définitions de fonctions
- Seule la ligne de liaison sous le triangle du nom est affichée, et le sigil
defdistinct est omis - Cela s’applique aux trois types d’anneaux
- Les autres usages de
defsont traités avec un sigil normal - Cela ne s’applique qu’à l’intérieur des tableaux exécutables ; ce n’est pas proposé dans les dictionnaires, car cela pourrait prêter à confusion
Algorithmes d’exemple
L’illustration en haut montre un exemple de quicksort.
Un exemple de l’algorithme du PGCD d’Euclide est également fourni. Cet exemple utilise la fonction utilisateur /arg {exch def} def.
Fonctions de génération d’images Mystical
Toutes sont définies dans "mystical.ps".
- mystical : prend un tableau, un tableau exécutable ou un dictionnaire, et en visualise récursivement la structure interne. L’image complète est redimensionnée pour s’adapter au cercle unitaire
- mystical_evoke : prend un nom, le cherche dans le dictionnaire courant et le rend comme ci-dessus
- mystical_evoke_label : ajoute une ligature nom-def et ajuste l’orientation pour que le sigil du nom apparaisse verticalement
Il existe aussi des versions _unscaled de ces fonctions. Dans ce cas, la mise à l’échelle est impossible et les anneaux sont affichés très grands.
Problèmes de mise en page
- Le code actuel optimise le placement des cercles enfants pour éviter les collisions, mais reste conservateur, ce qui étale excessivement la composition
- Dans les illustrations d’exemple, l’analyse et la mise en page passent par
mystical_get_spell,mystical_make_evocation_ligature, etc., puis l’image est produite avec des ajustements manuels via les fonctions draw_sigil et draw_link - Les réglages par défaut de la mise en page devraient être améliorés à l’avenir
Mystical en tant que langage de programmation
- À l’heure actuelle, Mystical est un outil pour dessiner des programmes PostScript
- Il n’existe pas d’interpréteur capable d’exécuter directement les images Mystical
- L’idée est qu’un humain regarde l’image pour comprendre le code PostScript, ou le réécrive en programme PostScript pour l’exécuter
- Les discussions purement linguistiques sont remises à plus tard
Possibilité d’application à d’autres langages
- Le potentiel est important pour des langages composés uniquement d’opérateurs, comme FORTH
- Pour des langages à structure plus complexe, il y a un risque de multiplication excessive des anneaux
Cette page a été créée le 2025-05-16 par Denis
1 commentaires
Commentaires sur Hacker News