3 pontos por GN⁺ 2025-05-18 | 1 comentários | Compartilhar no WhatsApp
  • Mystical é uma forma única de visualizar programas em PostScript no formato de círculos mágicos
  • Representa a estrutura de programação na forma de anéis (rings), com vários tipos como arrays executáveis, arrays não executáveis e dicionários
  • Usa símbolos especiais chamados sigils para representar de forma original comandos, variáveis, strings etc.
  • Padrões de definição ou declarações de função usam uma representação especial de ligature, e sigils personalizados também são suportados
  • Atualmente é uma ferramenta para converter programas PostScript em imagens gráficas; não existe um interpretador próprio

Visão geral do Mystical

Mystical é um projeto experimental que tem como objetivo ser uma linguagem de programação parecida com um círculo mágico. Na prática, é uma forma de representar visualmente código PostScript em formato de círculo mágico, e este documento chama esse método de “Mystical”.

Estrutura de anéis (Rings)

  • A estrutura do Mystical é centrada na forma de anéis
  • Cada anel contém letras e sigils, e possui bordas interna e externa
  • O anel principal do programa começa à direita (posição de 3 horas) e segue no sentido anti-horário (widdershins). Isso reflete a regra angular do PostScript e a ideia de que círculos mágicos são escritos de fora para dentro
  • Anéis subordinados começam no ponto de contato com o anel superior

Os três tipos de anel

  • Array executável (Executable array): corresponde a {} no PostScript. Usa bordas circulares simples por dentro e por fora, além de formato de estrela, com símbolos baseados em sinais alquímicos no início/fim
  • Array não executável (Non-executable array): corresponde a [] no PostScript. Não tem formato de estrela e usa triângulos no início/fim
  • Dicionário (Dictionary): corresponde a <<>> no PostScript. Tem formato poligonal, com borda externa dupla e borda interna simples. A marcação de início/fim é a mesma

Quando outra estrutura entra dentro de um anel, ela é conectada por pequenos pontos ou linhas, representando visualmente a hierarquia

Limitações no uso de PostScript

  • Em PostScript, [ ] ou << >> podem ser usados de maneiras que as regras do Mystical não permitem, por isso isso não é recomendado
  • gsave/grestore, begin/end etc. são mais usados em estruturas desequilibradas, então são tratados como sigils normais

Texto e sigils

  • Na borda do anel são colocados caracteres ou sigils (símbolos especiais)
  • Os sigils representam operadores, variáveis e palavras-chave
  • /name em PostScript é representado como um nome ou sigil dentro de um triângulo, e strings () como um formato de pergaminho

Sigils padrão (Standard Sigils)

  • sigils exclusivos para muitos operadores embutidos
  • Em geral, o design é baseado na inicial do comando, em uma figura conceitual ou em uma linguagem visual

Ex.: 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 usuário (User Sigils)

  • Para novas funções ou nomes, é possível adicionar em tempo de execução ao sigil_bank
  • O design precisa caber em um quadrado de 1 unidade (transformações de coordenadas são possíveis)
  • Ao usar nstroke, é possível obter o mesmo efeito tipográfico dos sigils existentes
  • Sigils para variáveis de usuário podem ser criados de várias formas (sobreposição de letras, diferentes linguagens visuais etc.)
  • Novos nomes baseados em operadores oficiais podem ser combinados com sigils padrão

Ligature para /name { ring } def

  • Há um sigil especial para padrões usados com frequência, como definições de função
  • Apenas a linha de conexão é mostrada abaixo do triângulo do nome, e o sigil def separado é omitido
  • Pode ser aplicado aos três tipos de anel
  • Outros usos de def são tratados como sigils normais
  • Só se aplica dentro de arrays executáveis; dentro de dicionários não é fornecido, por poder causar confusão de uso

Algoritmos de exemplo

A figura superior mostra um exemplo de Quicksort

Também é fornecido um exemplo do algoritmo do máximo divisor comum (GCD) de Euclides. Esse exemplo usa a função de usuário /arg {exch def} def

Funções de geração de imagem do Mystical

Todas estão definidas em "mystical.ps"

  • mystical: recebe um array, array executável ou dicionário e visualiza recursivamente até a estrutura interna. A imagem inteira é ajustada em escala para caber no círculo unitário
  • mystical_evoke: recebe um nome, procura no dicionário atual e renderiza como acima
  • mystical_evoke_label: adiciona a ligature nome-def e ajusta a orientação para que o sigil do nome fique vertical

Essas funções também têm versões _unscaled. Nesse caso, não é possível escalar, então os anéis são impressos em tamanho muito grande

Problemas de layout

  • O código atual otimiza o posicionamento dos círculos filhos sem colisões, mas é conservador, então o layout acaba ficando aberto demais
  • Nas imagens de exemplo, após fazer parsing/layout com mystical_get_spell, mystical_make_evocation_ligature etc., a figura é gerada com ajustes manuais usando as funções draw_sigil e draw_link
  • No futuro, as configurações padrão de layout devem ser melhoradas

Mystical como linguagem de programação

  • Atualmente, Mystical é uma ferramenta para desenhar programas PostScript
  • Não existe um interpretador que execute diretamente as próprias imagens do Mystical
  • A ideia é que uma pessoa veja a imagem e entenda o código PostScript, ou o reescreva como um programa PostScript para executar
  • Discussões sobre a linguagem em si ficam para depois

Possibilidade de aplicação a outras linguagens

  • Em linguagens compostas apenas por operadores, como FORTH, há bastante potencial de uso
  • Em linguagens com estrutura mais complexa, existe o risco de surgirem anéis demais

Baixar no github


Baixar no codeberg


Esta página foi criada em 2025-05-16 por Denis

1 comentários

 
GN⁺ 2025-05-18
Comentários do Hacker News
  • Impressão de que lembra o anime japonês Dennō Coil, mencionando cenas em que as crianças literalmente desenham programas no chão e os usam como se fosse magia, com forte recomendação
    • Compartilha que adorou muito essa obra, achando que ela mostrou bem como as crianças adotam novas tecnologias de forma diferente dos adultos, e que foi uma direção pioneira, até uns 5 anos à frente do Google Glass
    • Veio com exatamente a mesma impressão e elogia como uma obra realmente excelente
  • Satiriza com humor realista as situações de jogos em que se entoam feitiços ou rituais, com a prece: "invoquei a deusa da lua vermelha, preparei o altar e carreguei os cristais, então por favor desta vez inicialize"
    • Piada ritual adicional para tirar as velas de cima da pilha de bíblias
  • Comentário de que é uma linguagem de programação que o protagonista de outro mundo da série de blog "Xing the technical interview", do Aphyr, gostaria, recomendando que ela merece entrar nessa série, além de compartilhar um link de referência relacionado
    • Reação de que não conhecia a série e avaliação de que é realmente muito divertida
  • Recomendação de um tópico de discussão no Reddit sobre OVNIs relacionado aos programas de engenharia reversa Isaac e Caret, com opinião incentivando uma investigação mais profunda
  • Demonstração de que esse trabalho é impressionante demais, perguntando sobre a licença e expressando expectativa de que, como projeto derivado, aplicar um estilo forth usando apenas recursão pura combinaria perfeitamente com o sistema de magia do jogo em desenvolvimento, que atualmente carece de visualização; avaliação de que Mystical é a solução que estrutura a magia no jogo e satisfaz tanto a forma como o usuário escreve quanto a imersão
    • No jogo Noita também existe um sistema parecido de criação de magia, apresentando um sistema de varinhas em que é possível aplicar programaticamente repetição, multiplicação, duplicação etc., além de fornecer o link do jogo na Steam
  • Compartilha um exemplo em que ritual mágico e comando de programação se combinam de forma magistral, citando um trecho do poema "Black Perl", famoso no universo Perl
  • Opinião de que essa linguagem de programação é de fato bastante prática; é raro ver uma esolang tão focada em estética que ainda assim seja tão legível e fácil de usar, e a ideia poderia ser aplicada também a linguagens da família Lisp, baseadas em pilha, linguagens de array etc.; com um editor estruturado adequado, o código poderia ficar conciso e muito claro a ponto de funcionar até no desenvolvimento de software real
  • Compartilha a experiência de ter achado o PostScript uma linguagem poderosa o bastante para reorganizar o cérebro só com notação pós-fixa, e elogia como é novo ver isso combinado com um visual estético
    • Pede recomendações de outras linguagens parecidas para exercitar a mente, dizendo que gostaria de aprender ao menos um pouco de várias linguagens como ps ou lisp
  • Ideia de que essa abordagem talvez tenha vários usos, por exemplo como uma forma mais bonita de QR code; a decodificação automática seria um pouco complicada, mas agrada essa combinação de senso estético com lógica
  • Informação de que, para aprender mais sobre chaos magick e os fundamentos de feitiços com sigilos, vale consultar o Psychonaut Field Manual