3 points par GN⁺ 2025-05-18 | 1 commentaires | Partager sur WhatsApp
  • 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, /name est 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 def distinct est omis
  • Cela s’applique aux trois types d’anneaux
  • Les autres usages de def sont 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

télécharger sur github


télécharger sur codeberg


Cette page a été créée le 2025-05-16 par Denis

1 commentaires

 
GN⁺ 2025-05-18
Commentaires sur Hacker News
  • Impression que cela rappelle l’anime japonais Dennō Coil, avec mention de scènes où des enfants dessinent des programmes au sol presque exactement comme l’auteur et les invoquent comme par magie, avec une forte recommandation
    • Partage du fait qu’il a vraiment adoré cette œuvre, qui montrait très bien la manière dont les enfants adoptent les nouvelles technologies différemment des adultes, et même une mise en scène pionnière avec 5 ans d’avance sur Google Glass
    • Dit avoir eu exactement la même pensée, et salue une œuvre vraiment remarquable
  • Satire humoristique réaliste des situations de jeu où l’on déclame des sorts ou des rituels, avec cette prière : « J’ai invoqué la déesse de la lune rouge, préparé l’autel et rechargé les cristaux, alors s’il te plaît, démarre cette fois. »
    • Blague rituelle supplémentaire demandant d’enlever les bougies du tas de manuels bibliques
  • Impression qu’il s’agit d’un langage de programmation qu’adorerait le protagoniste d’isekai de la série de billets de blog d’Aphyr, "Xing the technical interview", avec recommandation de l’y faire figurer absolument, ainsi qu’un lien de référence connexe partagé
    • Réponse disant ne pas connaître cette série et la trouver vraiment amusante
  • Recommandation d’un fil de discussion Reddit sur les OVNI lié au programme de rétro-ingénierie Isaac et Caret, avec un avis poussant à creuser davantage
  • Juge cette création absolument incroyable, demande des précisions sur la licence et exprime son enthousiasme à l’idée qu’un projet dérivé appliquant un style Forth n’utilisant que de la récursion pure conviendrait parfaitement au système de magie visuellement insuffisant de son jeu en cours, estimant que Mystical est une solution qui structure la magie en jeu tout en satisfaisant à la fois l’écriture par les utilisateurs et l’immersion
    • Signale que le jeu Noita possède aussi un système de création de magie similaire, en présentant un système de baguettes permettant d’appliquer programmatiquement répétition, multiplication, duplication, etc., avec partage du lien Steam du jeu
  • Partage un extrait du poème "Black Perl", célèbre dans l’univers Perl, comme exemple où rituel magique et commandes de programmation s’entremêlent à merveille
  • Avis selon lequel ce langage de programmation est en réalité assez pratique : il est rare qu’un esolang centré sur l’esthétique soit aussi lisible et facile à utiliser, et l’idée pourrait aussi s’appliquer à des langages de type Lisp, à pile ou à tableaux ; avec un éditeur structuré adapté, le code pourrait être suffisamment concis et clair pour convenir au développement logiciel réel
  • Partage l’expérience d’avoir trouvé PostScript suffisamment puissant, rien qu’avec sa notation postfixée, pour reconfigurer le cerveau, et salue la fraîcheur de l’association avec une esthétique visuelle
    • Demande des recommandations d’autres langages similaires qui servent d’entraînement cérébral, en exprimant le souhait d’essayer au moins brièvement divers langages comme ps ou lisp
  • Trouve que cette approche pourrait avoir divers usages, par exemple sous forme de QR codes plus esthétiques ; le décodage automatique serait un peu délicat, mais l’alliance du sens esthétique et de la logique lui plaît
  • Indique que, pour en savoir plus sur la chaos magick et les bases des sorts par sigils, il faut consulter le Psychonaut Field Manual