3 ポイント 投稿者 GN⁺ 2025-05-18 | 1件のコメント | WhatsAppで共有
  • ミスティカルは、魔法陣の形で PostScript プログラムを視覚化する独特な方式
  • プログラミング構造をリング形式で表現し、実行配列、非実行配列、辞書などのさまざまな型がある
  • シジルという特殊シンボルによって、命令や変数、文字列などを独自に表す
  • 定義パターンや関数宣言には、別個の**合字(ligature)**表現が適用され、ユーザー定義シジルにも対応
  • 現在は PostScript プログラムをグラフィック画像に変換するツールであり、独自インタプリタは存在しない

ミスティカル(Mystical)概要

ミスティカルは、魔法陣に似たプログラミング言語を目指した実験的プロジェクト。実際には、魔法陣の形で PostScript コードを視覚的に表現する方式であり、この文書ではこの方法を「ミスティカル」と呼んでいる。

リング構造

  • ミスティカルの構造はリング形状を中心とする
  • 各リングは文字とシジルを含み、内側と外側の境界線を持つ
  • プログラムのメインリングは右側(3時方向)から始まり、**反時計回り(widdershins)**に進む。これは PostScript の角度規則と、魔法陣が外側から内側へ書かれるという概念を反映している
  • 下位リングは上位リングの接点から始まる

リングの3種類

  • 実行配列(Executable array): PostScript の {} に相当。内外に単純な円形境界と星形があり、開始/終了には錬金術記号ベースのシンボルを使用
  • 非実行配列(Non-executable array): PostScript の [] に相当。星形はなく、開始/終了に三角形を使用
  • 辞書(Dictionary): PostScript の <<>> に相当。多角形状で、二重の外側境界と単一の内側境界を持つ。開始/終了表示は同じ

リング内に別の構造が入るときは、小さな点または線で接続して階層を視覚的に表現する

PostScript 利用上の制限

  • PostScript では [ ] または << >> をミスティカルの規則上許容されない形で使えるため、推奨されない
  • gsave/grestorebegin/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 シジルは省略する
  • 3種類すべてのリング型に適用可能
  • それ以外の def の使用は通常のシジルとして扱う
  • 実行配列内でのみ適用し、辞書内では使用上の混乱を避けるため提供しない

サンプルアルゴリズム

上部の図は**クイックソート(Quicksort)**の例。

ユークリッドの最大公約数(GCD)アルゴリズムの例もある。この例ではユーザー関数 /arg {exch def} def を使っている。

ミスティカル画像生成関数

すべて "mystical.ps" に定義されている

  • mystical: 配列、実行配列、または辞書を受け取り、内部構造まで再帰的に視覚化する。全体画像は単位円に収まるようスケーリングされる
  • mystical_evoke: 名前を受け取り、現在の辞書から検索して上記のようにレンダリングする
  • mystical_evoke_label: 名前-def 合字シジルを追加し、名前シジルが垂直に見えるよう向きを調整する

これらの関数には _unscaled 版もある。この場合はスケーリングできず、リングが非常に大きく出力される

レイアウトの問題

  • 現在のコードは下位円の配置を衝突なしで最適化するが、保守的なため配置が過度に広がる
  • 例示図では mystical_get_spellmystical_make_evocation_ligature などで解析/配置した後、draw_sigildraw_link 関数で手動調整して図を出力している
  • 今後はレイアウトのデフォルト設定を改善する予定

プログラミング言語としてのミスティカル

  • 現在のミスティカルはPostScript プログラムを描画するツール
  • ミスティカル画像自体を解釈実行するインタプリタはない
  • 人が画像を見て PostScript コードを理解するか、PostScript プログラムとして書き直して実行する方式
  • 言語としての議論は今後に持ち越す

他言語への適用可能性

  • FORTH のように演算子だけで構成される言語では活用の可能性が高い
  • 構造がより複雑な言語では、適用時にリングが過剰に増えるおそれがある

github からダウンロード


codeberg からダウンロード


このページは 2025-05-16 に Denis によって作成された

1件のコメント

 
GN⁺ 2025-05-18
Hacker Newsの感想
  • 日本のアニメ『Dennō Coil』を思い出したという感想。子どもたちが実際に作者とほぼ同じように床にプログラムを描いて魔法のように操る場面に言及し、強く推薦している
    • あの作品が本当に大好きだったという感想の共有。子どもたちが大人とは違う形で新技術を受け入れる様子をうまく描いており、しかも Google Glass より5年は早かった先駆的な演出だったという所感
    • まったく同じことを思って来たし、本当に素晴らしい作品だという賛辞
  • ゲームで魔法や儀式を唱える状況を現実的なユーモアで風刺し、「赤い月の女神を呼び、祭壇も用意し、クリスタルも充電したので、どうか今回は起動してくれ」という祈願の内容
    • 聖書の山からロウソクをどかせという追加の儀式ジョーク
  • Aphyr の「Xing the technical interview」ブログシリーズの異世界主人公が好みそうなプログラミング言語だという感想。このシリーズにぜひ載せる資格があると勧め、関連参考リンクも共有
    • そのシリーズを知らなかったという反応と、本当に面白いという評価
  • Isaac と Caret のリバースエンジニアリングプログラムに関連する UFO の Reddit 議論スレッドを勧め、さらに深く掘り下げるよう促す意見
  • この作品はあまりにも驚異的で、ライセンスについて問い合わせつつ、派生プロジェクトとして純粋再帰だけを使う forth スタイルを適用すれば、現在制作中のゲームで視覚化が不足している魔法システムに完璧に合うだろうという期待感を示している。Mystical はゲーム内の魔法を構造化し、ユーザーが自分で書く方法と没入感の両方を満たしてくれる解決策だという判断
    • Noita にも似た方式の魔法制作システムが存在し、プログラミング的に反復、乗算、複製などを適用できるワンドシステムがあると紹介し、ゲームの Steam リンクを提供
  • Perl で有名な「Black Perl」の詩の一節を引用し、魔法の儀式とプログラミング命令が絶妙に溶け合った例を共有
  • このプログラミング言語は実際かなり実用的だという所見。美学を重視した esolang(奇妙な言語)の中で、これほど読みやすく使いやすいものは珍しいという評価で、このアイデアは Lisp 系、スタックベース、配列言語などにも応用できるのではないかと考えている。適切な構造化エディタと組み合わせれば、実際のソフトウェア開発でも通用するほどコードが簡潔で見通しよくなり得るという意見
  • PostScript は後置記法だけでも脳を組み替えるほど強力な言語だと感じた経験の共有。そこに美的なビジュアルが組み合わさるのが新鮮だという賛辞
    • ほかに似たような頭の訓練になる言語のおすすめを求め、ps や lisp のようなさまざまな言語を短くでも学んでみたいという願望を表明
  • この方式にはさまざまな用途があり得るのではないかという考え。たとえば、より美しい QR コードのような形で活用できるかもしれず、自動デコードは少し厄介だとしても、美的感覚と論理の結び付きが気に入ったという評価
  • chaos magick(カオス・マジック)とシジル呪文の基礎についてさらに知りたいなら、Psychonaut Field Manual を参照するとよいという情報提供