Mystical
(suberic.net)- Mystical es una forma única de visualizar programas PostScript con apariencia de círculo mágico
- Representa la estructura de programación en forma de anillos (rings), con varios tipos como arreglos ejecutables, arreglos no ejecutables y diccionarios
- Mediante símbolos especiales llamados sigils, representa de manera original comandos, variables, cadenas y más
- Para patrones de definición o declaraciones de funciones, aplica una representación especial de ligaduras (ligatures), y también admite sigils personalizados por el usuario
- Actualmente es una herramienta para convertir programas PostScript en imágenes gráficas y no existe un intérprete propio
Descripción general de Mystical
Mystical es un proyecto experimental que apunta a ser un lenguaje de programación con apariencia de círculo mágico. En la práctica, es una forma de representar visualmente código PostScript con forma de círculo mágico, y en este documento ese método se denomina "Mystical".
Estructura de anillos (Rings)
- La estructura de Mystical se basa en la forma de anillos
- Cada anillo contiene letras y sigils, y tiene bordes interior y exterior
- El anillo principal del programa comienza a la derecha (posición de las 3 en punto) y avanza en sentido antihorario (widdershins). Esto refleja las reglas angulares de PostScript y la idea de que los círculos mágicos se escriben de afuera hacia adentro
- Los subanillos comienzan en el punto de contacto con el anillo superior
Tres tipos de anillos
- Arreglo ejecutable (Executable array): corresponde a
{}en PostScript. Usa bordes circulares simples por dentro y por fuera, forma de estrella, y símbolos basados en signos alquímicos al inicio/final - Arreglo no ejecutable (Non-executable array): corresponde a
[]en PostScript. No tiene forma de estrella y usa triángulos al inicio/final - Diccionario (Dictionary): corresponde a
<<>>en PostScript. Tiene forma poligonal, doble borde exterior y un solo borde interior. Las marcas de inicio/final son las mismas
Cuando otra estructura aparece dentro de un anillo, se conecta con pequeños puntos o líneas para representar visualmente la jerarquía
Restricciones al usar PostScript
- En PostScript,
[ ]o<< >>pueden usarse de formas que no están permitidas por las reglas de Mystical, por lo que no se recomiendan gsave/grestore,begin/endy otros se usan más en estructuras desbalanceadas, así que se tratan como sigils normales
Texto y sigils
- En el borde del anillo se colocan caracteres o sigils (símbolos especiales)
- Los sigils representan operadores, variables y palabras clave
- En PostScript,
/namese representa como un nombre o sigil dentro de un triángulo, y la cadena()como una forma de pergamino
Sigils estándar (Standard Sigils)
- Existe un sigil propio para muchos operadores integrados
- Normalmente se diseñan a partir de la inicial del comando, una imagen del concepto o un lenguaje visual
Ejemplos: 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 de usuario (User Sigils)
- Para nuevas funciones o nombres, se pueden agregar en tiempo de ejecución a
sigil_bank - Deben diseñarse dentro de un cuadrado de 1 unidad (se permite transformación de coordenadas)
- Al usar
nstroke, pueden lograr el mismo efecto tipográfico que los sigils existentes - Los sigils para variables de usuario pueden crearse de muchas maneras, como superposición de letras o distintos lenguajes visuales
- Los nombres nuevos basados en operadores oficiales pueden combinarse con sigils estándar
Ligadura de /name { ring } def
- Se ofrece un sigil especial para patrones de uso frecuente, como definiciones de funciones
- Solo se muestra una línea de conexión debajo del triángulo del nombre, y se omite el sigil
defpor separado - Puede aplicarse a los tres tipos de anillo
- Los demás usos de
defse manejan como sigils normales - Solo se aplica dentro de arreglos ejecutables; no se ofrece dentro de diccionarios porque podría generar confusión de uso
Algoritmos de ejemplo
La imagen superior es un ejemplo de Quicksort
También se ofrece un ejemplo del algoritmo de máximo común divisor (GCD) de Euclides. Ese ejemplo utiliza la función de usuario /arg {exch def} def
Funciones para generar imágenes Mystical
Todo está definido en "mystical.ps"
- mystical: recibe un arreglo, arreglo ejecutable o diccionario, y visualiza recursivamente la estructura interna. La imagen completa se escala para ajustarse al círculo unitario
- mystical_evoke: recibe un nombre, lo busca en el diccionario actual y lo renderiza como arriba
- mystical_evoke_label: agrega una ligadura nombre-def y ajusta la orientación para que el sigil del nombre se vea vertical
Estas funciones también tienen versiones _unscaled. En ese caso no se pueden escalar, así que los anillos se imprimen muy grandes
Problemas de layout
- El código actual optimiza la ubicación de los círculos hijos para evitar colisiones, pero es conservador y el resultado queda demasiado expandido
- En las imágenes de ejemplo, tras hacer el parseo y layout con
mystical_get_spell,mystical_make_evocation_ligaturey otros, la imagen se imprime ajustando manualmente con las funciones draw_sigil y draw_link - En el futuro se planea mejorar la configuración predeterminada del layout
Mystical como lenguaje de programación
- Actualmente, Mystical es una herramienta para dibujar programas PostScript
- No existe un intérprete que ejecute directamente las imágenes de Mystical
- La idea es que una persona vea la imagen y entienda el código PostScript, o que lo reescriba como programa PostScript para ejecutarlo
- La discusión lingüística se deja para más adelante
Posible aplicación a otros lenguajes
- En lenguajes compuestos solo por operadores, como FORTH, tiene bastante potencial de uso
- En lenguajes con estructuras más complejas, existe el riesgo de que aparezcan demasiados anillos al aplicarlo
Esta página fue creada por Denis el 2025-05-16
1 comentarios
Opiniones en Hacker News