3P by GN⁺ 2일전 | ★ favorite | 댓글 1개
  • 미스티컬은 마법진 형태로 PostScript 프로그램을 시각화하는 독특한 방식임
  • 프로그래밍 구조를 고리(ring) 형태로 표현하며, 실행 배열, 비실행 배열, 딕셔너리 등 다양한 타입이 있음
  • 시길(sigil) 이라는 특수 심볼을 통해 명령어나 변수, 문자열 등을 독창적으로 나타냄
  • 정의 패턴이나 함수 선언에는 별도의 결합 기호(ligature) 표현이 적용되며, 사용자 맞춤 시길도 지원함
  • 현재는 PostScript 프로그램을 그래픽 이미지로 변환하는 도구이며, 자체 인터프리터는 존재하지 않음

미스티컬(Mystical) 개요

미스티컬은 마법진을 닮은 프로그래밍 언어를 목표로 한 실험적 프로젝트임. 실제로는 마법진 형태로 PostScript 코드를 시각적으로 표현하는 방식이며, 이 문서에서는 이 방법을 '미스티컬'이라 명명함.

고리(Rings) 구조

  • 미스티컬의 구조는 고리 형태를 중심으로 함
  • 각 고리는 글자와 시길을 담고 있으며, 안쪽과 바깥쪽 경계선이 있음
  • 프로그램의 메인 고리는 오른쪽(3시 방향)에서 시작해 시계 반대 방향(widdershins) 으로 진행함. 이는 PostScript의 각도 규칙과 마법진이 바깥에서 안으로 써진다는 개념을 반영함
  • 하위 고리는 상위 고리의 접점에서 시작함

고리의 세 종류

  • 실행 배열(Executable array) : PostScript의 {}에 해당. 내부와 외부에 단순 원형 경계와 별 모양, 시작/종료에는 연금술 기호 기반 심볼 사용
  • 비실행 배열(Non-executable array) : PostScript의 []에 해당. 별 모양 없음, 시작/종료 삼각형 사용
  • 딕셔너리(Dictionary) : PostScript의 <<>>에 해당. 다각형 형태에 이중 바깥 경계와 단일 안쪽 경계. 시작/종료 표시 동일

고리 안에 또 다른 구조가 들어올 때는 작은 점 또는 선으로 연결되어 계층을 시각적으로 표현함

PostScript 사용상의 제한

  • PostScript에서 [ ] 또는 << >>를 미스티컬 규칙상 허용 불가 방식으로 쓸 수 있으므로 권장하지 않음
  • gsave/grestore, begin/end 등은 비균형적 구조에 더 많이 쓰이므로 일반 시길로 처리함

텍스트와 시길(Sigils)

  • 고리 테두리에는 문자 또는 시길(특수 심볼)이 배치됨
  • 시길은 연산자, 변수, 키워드를 나타냄
  • PostScript의 /name삼각형 안에 이름이나 시길로, 문자열 ()두루마리 모양으로 표현

표준 시길(Standard Sigils)

  • 내장 연산자 다수에 대해 고유 시길이 존재
  • 보통 명령어의 이니셜, 개념의 그림, 또는 시각적 언어로 디자인됨

예: 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 등

사용자 시길(User Sigils)

  • 새 함수나 이름에 대해 런타임에 sigil_bank에 추가 가능
  • 1-유닛 정사각형 내로 디자인 필요(좌표 변환 가능)
  • nstroke 사용 시 기존 시길과 동일한 서체 효과 가능
  • 사용자 변수용 시길은 다양한 방식(글자 겹침, 다양한 시각적 언어 등)으로 제작 가능
  • 공식 연산자 기반 새 이름은 표준 시길과 조합 가능

/name { ring } def 결합 시길(Ligature)

  • 함수 정의 등에서 자주 쓰는 패턴을 위한 특수 시길 제공
  • 이름 삼각형 아래에 연결선만 표현하며, 별도의 def 시길은 생략함
  • 세 가지 고리 타입 모두에 적용 가능
  • 그 외의 def 사용은 일반 시길로 처리
  • 실행 배열 내에서만 적용하며, 딕셔너리 내에서는 사용상 혼란 가능성으로 제공 안 함

샘플 알고리듬

상단 그림은 퀵소트(Quicksort) 예시임

Euclid 최대공약수(GCD) 알고리듬 예시도 제공함. 해당 예시는 사용자 함수 /arg {exch def} def를 활용

미스티컬 이미지 생성 함수

모두 "mystical.ps"에 정의됨

  • mystical: 배열, 실행 배열, 또는 딕셔너리를 받아 내부 구조까지 재귀적으로 시각화. 전체 이미지는 단위 원에 맞게 스케일 조정
  • mystical_evoke: 이름을 받아 현재 딕셔너리에서 찾아 위와 같이 렌더링
  • mystical_evoke_label: 이름-def 결합 시길 추가, 이름 시길이 수직으로 보이게 방향 조절

위 함수들에는 _unscaled 버전도 존재. 이 경우 스케일 불가하여 고리가 매우 크게 출력됨

레이아웃 문제

  • 현재 코드는 하위 원의 배치를 충돌 없이 최적화하지만, 보수적이라 배치가 과하게 펼쳐짐
  • 예시 그림에서는 mystical_get_spell, mystical_make_evocation_ligature 등으로 파싱/배치 후, draw_sigil, draw_link 함수로 직접 조정해 그림을 출력함
  • 향후 레이아웃 디폴트 설정을 개선할 예정임

프로그래밍 언어로서의 미스티컬

  • 현재 미스티컬은 PostScript 프로그램을 그리는 도구
  • 미스티컬 이미지 자체를 해석 실행하는 인터프리터는 없음
  • 사람이 이미지를 보고 PostScript 코드를 이해하거나, PostScript 프로그램으로 재작성하여 실행하는 방식임
  • 언어적 논의는 추후로 미룸

다른 언어 적용 가능성

  • FORTH와 같이 연산자만으로 이루어진 언어에서는 활용 가능성이 큼
  • 구조가 더 복잡한 언어에는 적용 시 고리가 과도하게 많아질 우려가 있음

github에서 다운로드


codeberg에서 다운로드


이 페이지는 2025-05-16에 Denis가 생성함

Hacker News 의견
  • 일본 애니메이션 Dennō Coil이 생각나는 감상, 아이들이 실제로 저자와 거의 동일하게 프로그램을 바닥에 그려 마법처럼 부리는 장면 언급, 강력 추천 의견
    • 그 작품을 정말 좋아했다는 감상 공유, 아이들이 어른과는 다르게 신기술을 받아들이는 방법을 잘 보여주었고, 심지어 google glass보다도 5년은 빨랐던 선구적인 연출이라는 소감
    • 똑같은 생각을 하고 왔으며, 정말 훌륭한 작품이라는 찬사
  • 게임에서 마법이나 의식을 외치는 상황을 현실적인 유머로 풍자하여, "붉은 달의 여신을 부르고, 제단도 준비하고, 크리스탈도 충전했으니, 제발 이번엔 부팅을 해달라"는 기원 내용
    • 성서 더미에서 촛불을 치우라는 추가 의식 농담
  • Aphyr의 "Xing the technical interview" 블로그 시리즈의 이세계 주인공이 좋아할 만한 프로그래밍 언어라는 감상, 이 시리즈에 꼭 등재될 자격이 있다고 추천, 그리고 관련 참고 링크 공유
    • 그 시리즈를 몰랐다는 반응과, 정말 재미있다는 평
  • Isaac와 Caret 리버스 엔지니어링 프로그램과 관련된 UFO 레딧 토론 스레드 추천, 더 깊은 탐구를 재촉하는 의견
  • 이 작업물이 너무 놀랍고, 라이선스에 대해 문의하며, 파생 프로젝트로 순수 재귀만 사용하는 forth 스타일을 적용하면 현재 작업 중인 게임에서 시각화가 부족한 마법 시스템에 완벽히 어울릴 것이라 기대감 표시, Mystical이 게임 내 마법을 구조화하여 유저가 작성하는 방법과 몰입감을 모두 충족시켜 주는 해법이라는 판단
    • Noita 게임에도 비슷한 방식의 마법 제작 시스템이 존재, 프로그래밍적으로 반복, 곱셈, 복제 등을 적용할 수 있는 완드 시스템 소개와 게임 스팀 링크 제공
  • Perl로 유명한 "Black Perl" 시의 한 부분을 인용하며, 마법 의식과 프로그래밍 명령이 절묘하게 어우러진 예시 공유
  • 이 프로그래밍 언어가 실제로 꽤나 실용적이라는 소견, 미학에 중점을 둔 esolang(괴짜 언어) 중 이토록 읽기 쉽고 사용이 간편한 경우가 드물다는 평가, 이런 아이디어가 Lisp류, 스택 기반, 배열 언어 등에도 적용될 수 있다고 생각, 적절한 구조화된 에디터와 결합하면 실제 소프트웨어 개발에도 통할 수 있을 만큼 코드가 간결하고 일목요연할 수 있다는 의견
  • PostScript가 후위표기법만으로도 두뇌를 재구성할 정도로 강력한 언어라고 느낀 경험 공유, 여기에 미학적 비주얼이 결합되는 것이 신선하다는 찬사
    • 다른 비슷한 두뇌 훈련 언어 추천 요청, ps나 lisp 같이 다양한 언어를 짧게라도 익혀보고 싶다는 바람 표출
  • 이 방식이 다양한 용도가 있을 수 있지 않냐는 생각, 예를 들면 더 예쁜 QR코드 형태로 활용 가능, 자동 디코딩은 약간 까다롭지만 미적 감각과 논리의 결합이 마음에 든다는 평
  • chaos magick(카오스 마법)과 시길 주문 기초에 대해 더 알고 싶다면 Psychonaut Field Manual을 참고하라는 정보 제공