В мире разработки хватает экзотики: одни языки создаются ради скорости и эффективности, другие — ради красоты или даже чистого искусства. Mystical — как раз из последних. Он превращает исходный код в необычные кольцевые структуры, за которыми скрывается синтаксис PostScript. Давайте разбираться, почему он так странно выглядит и что полезного можно сделать со всей этой красотой.

Происхождение и концепция

Источник

Mystical задуман как способ объединить программирование и визуальное искусство. Денис Московиц (Denis Moskowitz), автор проекта, стремился переосмыслить, PostScript стековый язык, который используется для работы с графикой и PDF. У Mystical нет собственного интерпретатора: его задача не исполнение, а представление. Код можно транслировать в тот же PostScript или прочитать вручную — как визуальный способ записи программы.

Каким образом? Как и эзотерические языки вроде Piet или Befunge, Mystical предлагает нестандартный способ представления программ. Основа — круговые полосы с текстом и сигилами, ограниченные внутренними и внешними рамками. О них еще расскажу ниже. Главное кольцо начинается с точки, расположенной в позиции «3:00» по аналогии с циферблатом, и код читается против часовой стрелки.

Такое направление выбрано не только из-за системы координат в PostScript, но и как отсылка к мистической символике: движение против часовой стрелки часто ассоциируется с магией. Вложенные кольца — подпрограммы или структурные элементы — начинаются в точке соединения с родительской окружностью.

Чтобы было понятнее, давайте пример. Вот как будет выглядеть реализация  алгоритма Евклида для нахождения наибольшего общего делителя.

{ /arg {exch def} def }
{ /gcd { /a exch def /b exch def b 0 eq { a } { b a b mod gcd } ifelse } def }
Пример реализации алгоритма Евклида для нахождения наибольшего общего делителя. Источник.
Пример реализации алгоритма Евклида для нахождения наибольшего общего делителя. Источник.

Что насчет синтаксиса 

Синтаксис Mystical устроен так, чтобы код был не только функциональным, но и интуитивно понятным. Вот его основные элементы: 

  • Сигилы: в Mystical операторы, переменные и ключевые слова заменяются сигилами — символами, которые отражают их смысл или функцию. Многие из них основаны на начальных буквах команд, стилизованных под алхимические знаки или абстрактные графические формы (показаны на скриншоте ниже). Пользовательские переменные могут быть представлены произвольными символами, созданными с опорой на визуальные системы.

  • Исполняемые массивы: в PostScript они обозначаются фигурными скобками { }. В Mystical они представлены кольцами с простыми границами и звездой внутри, а точка начала и конца помечена символом, напоминающим алхимический знак «работа завершена».

  • Неисполняемые массивы: в PostScript записываются в квадратных скобках [ ], а в Mystical изображаются как круг с отверстием в центре.

  • Словари: в PostScript обозначаются с помощью двойных угловых скобок << >>, а в Mystical они представлены в виде многоугольника.

  • Имена и строки: имена (в PostScript обозначаемые как /name) представляются с помощью треугольников, окружающих текст или сигил. Строки, обычно записываемые в PostScript в скобках (), в Mystical отображаются в виде картушей — декоративных рамок, содержащих текст.

  • Поток управления: некоторые команды, такие как gsave/grestore или begin/end, обрабатываются как обычные сигилы, поскольку их использование в PostScript может быть несбалансированным или пересекать циклы, что усложняет их визуальное представление в кольцах.

Это сигилы, придуманные автором. Источник
Это сигилы, придуманные автором. Источник

Mystical не поддерживает некоторые сложные конструкции PostScript — например, нестандартное использование квадратных скобок [ ] или словарей << >>, если они нарушают баланс. Это ограничение связано с визуальной природой языка, где четкая структура колец имеет приоритет. Для ЯП с более сложным синтаксисом, таких как Python или C++, адаптация под кольцевую структуру может быть затруднительной: вложенные блоки (например, фигурные скобки или отступы) потребовали бы создания новых колец, а тогда диаграмма получилась бы слишком громоздкой.

{ 0 0 currentlinewidth 1.5 mul 0 360 arc fill }     -&gt; исполняемый массив
[ 0 1 2 1.5 40 360 (Hooray World) ]                  -&gt; неисполняемый массив
&lt;&lt; /longname (Mystical) /w 45 /h 8 /x 23 &gt;&gt;         -&gt; словарь
Примеры конструкций и их результат в PostScript. Источник
Примеры конструкций и их результат в PostScript. Источник

Зачем все это нужно

Этот язык — не про написание утилитарных программ, а про эксперименты и творчество. Ну разве не интересно создать код, который выглядит как картина или гримуар? Mystical — находка для тех из нас, кто любит смешивать программирование с искусством. Он фанатов эзотерических языков типа Piet или Befunge, которые хотят попробовать что-то необычное.

А вот где еще может пригодиться Mystical:

  • Чтение кода: кольца и сигилы помогают быстро разобраться в логике проекта, особенно если учишь PostScript.

  • Запуск через PostScript: код Mystical легко переводится в PostScript, так что его можно выполнить как обычную программу.

  • Обучение: язык помогает понять, как работают стековые языки вроде PostScript или Forth.

Некоторые разработчики предлагали идеи, как прокачать язык. Например, создать многослойные круги для компактного представления сложных программ или добавить разные цвета, чтобы повысить плотность информации. Но все это увеличит количество элементов синтаксиса и усложнит работу с Mystical.

Что дальше

Mystical доступен на GitHub, так что разработчики и энтузиасты могут ознакомиться с его концепцией и примерами. Сообщество у проекта пока небольшое, но интерес к нему растет, судя хотя бы по количеству публикаций на разных ресурсах. Звезд на GitHub уже больше 480.

Скриншот GitHub проекта
Скриншот GitHub проекта

Mystical пока остается экспериментом. Разработчики отмечают, что писать код не всегда удобно: тут нет нормального интерфейса для работы с кольцами и сигилами. Некоторые энтузиасты предлагают использовать AR или VR, чтобы упростить взаимодействие с кодом, но пока это только идеи. 

Комментарии (8)


  1. tage_whanuvur
    31.05.2025 10:13

    1. Phomas
      31.05.2025 10:13

      Те два парня


      1. Wesha
        31.05.2025 10:13

        Те два парня

        А, это которые на Хабр статьи пишут?


  1. JediPhilosopher
    31.05.2025 10:13

    Давно мечтаю об игре, где система магии была бы основана на чем-нибудь таком. С визуальным программированием в таком вот стиле. Чтобы красивая круговая схема заклинания была не просто визуальным эффектом, а реально определяла эффект.

    Жаль ничего подобного никто так и не придумал.


    1. Rive
      31.05.2025 10:13

      Рисуемые руны в древней игре Arx Fatalis. Правда, они более простые визуально.


  1. NeoCode
    31.05.2025 10:13

    Атмосферно выглядит... В общем, если в следующей жизни попаду в Хогвартс, обязательно выберу там дополнительными предметами арифмантику и древние руны - наверняка это магические аналоги математики и программирования.


  1. jaqjaq
    31.05.2025 10:13

    Есть же классные и широко используемые примеры - Grasshopper, например.


  1. muica2222
    31.05.2025 10:13

    (mystical-symbol
    (define-universe
    (cycle :radius 100 :symbols '(♀ ☿ ♃ ☉ ♄ ☽))
    (law :type 'elemental-balance :elements '(earth water air fire))
    (alignment :center 'soul-core)
    )

    (core-geometry
    (triangle :type 'equilateral :inscribed-in 'universe)
    (star :points 6 :meaning 'spirit-matter-unity)
    )

    (energy-network
    (connect-center-to-elements)
    (flow :from 'soul-core :to '(earth water air fire) :via 'ley-lines)
    )

    (consciousness-levels
    (layer 'spiritual :position 'top)
    (layer 'mental :position 'middle)
    (layer 'physical :position 'bottom)
    )

    (activation
    (symbol :position 'above-core :type 'divine-star)
    (invoke :state 'cosmic-awareness)
    )
    )