Mystical
(suberic.net)- Mystical, PostScript programlarını büyü çemberi biçiminde görselleştiren benzersiz bir yöntemdir
- Programlama yapısını halka (ring) biçiminde ifade eder; yürütülebilir diziler, yürütülemeyen diziler, sözlükler gibi çeşitli türleri vardır
- Sigil adı verilen özel semboller aracılığıyla komutlar, değişkenler ve dizeler özgün biçimde gösterilir
- Tanım kalıpları veya fonksiyon bildirimleri için ayrı bir ligature gösterimi uygulanır ve kullanıcıya özel sigiller de desteklenir
- Şu anda PostScript programlarını grafik görüntülere dönüştüren bir araçtır; kendi yorumlayıcısı yoktur
Mystical genel bakış
Mystical, büyü çemberini andıran bir programlama dili hedefleyen deneysel bir projedir. Pratikte ise PostScript kodunu büyü çemberi biçiminde görsel olarak ifade etme yöntemidir; bu belgede bu yaklaşım "Mystical" olarak adlandırılır.
Halkalar (Rings) yapısı
- Mystical yapısı halka biçimini merkeze alır
- Her halka harfler ve sigiller içerir; iç ve dış sınır çizgileri bulunur
- Programın ana halkası sağdan (saat 3 yönü) başlar ve saat yönünün tersine (widdershins) ilerler. Bu, PostScript'in açı kurallarını ve büyü çemberlerinin dıştan içe yazıldığı fikrini yansıtır
- Alt halkalar, üst halkanın temas noktasından başlar
Üç halka türü vardır
- Yürütülebilir dizi (Executable array): PostScript'teki
{}karşılığıdır. İçte ve dışta basit dairesel sınırlar ve yıldız biçimi vardır; başlangıç/bitişte simya sembollerinden türetilmiş işaretler kullanılır - Yürütülemeyen dizi (Non-executable array): PostScript'teki
[]karşılığıdır. Yıldız biçimi yoktur, başlangıç/bitişte üçgen kullanılır - Sözlük (Dictionary): PostScript'teki
<<>>karşılığıdır. Çokgen biçimindedir; dışta çift, içte tek sınır bulunur. Başlangıç/bitiş işaretleri aynıdır
Bir halkanın içine başka bir yapı girdiğinde, hiyerarşiyi görsel olarak göstermek için küçük noktalar veya çizgilerle bağlanır
PostScript kullanımındaki kısıtlamalar
- PostScript'te
[ ]veya<< >>, Mystical kurallarına göre izin verilmeyen biçimlerde kullanılabildiği için önerilmez gsave/grestore,begin/endgibi yapılar daha çok dengesiz yapılarda kullanıldığından normal sigil olarak ele alınır
Metin ve sigiller (Sigils)
- Halkanın kenarına karakterler veya sigiller (özel semboller) yerleştirilir
- Sigiller operatörleri, değişkenleri ve anahtar kelimeleri temsil eder
- PostScript'teki
/name, üçgen içinde isim veya sigil olarak;()dizeleri ise tomar biçiminde gösterilir
Standart sigiller (Standard Sigils)
- Birçok yerleşik operatör için kendine özgü sigiller vardır
- Bunlar genellikle komutun baş harfi, kavramın bir resmi veya görsel bir dil üzerinden tasarlanır
Örnek: 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 vb.
Kullanıcı sigilleri (User Sigils)
- Yeni fonksiyonlar veya isimler için çalışma zamanında
sigil_bankiçine ekleme yapılabilir - Tasarımın 1 birimlik kare içine sığması gerekir (koordinat dönüşümü yapılabilir)
nstrokekullanıldığında mevcut sigillerle aynı yazı stili etkisi elde edilebilir- Kullanıcı değişkenleri için sigiller, harfleri üst üste bindirme veya farklı görsel diller kullanma gibi çeşitli yollarla üretilebilir
- Resmî operatörlere dayalı yeni isimler, standart sigillerle birleştirilebilir
/name { ring } def ligature sigili
- Fonksiyon tanımları gibi sık kullanılan kalıplar için özel sigiller sunulur
- İsim üçgeninin altında yalnızca bağlantı çizgisi gösterilir; ayrı
defsigili atlanır - Üç halka türünün tamamına uygulanabilir
- Bunun dışındaki
defkullanımları normal sigil olarak işlenir - Yalnızca yürütülebilir diziler içinde uygulanır; sözlük içinde kullanımda karışıklık yaratabileceği için sağlanmaz
Örnek algoritmalar
Üstteki görsel Quicksort örneğidir
Öklid en büyük ortak bölen (GCD) algoritması örneği de verilir. Bu örnek, kullanıcı fonksiyonu /arg {exch def} def kullanır
Mystical görüntü üretim fonksiyonları
Hepsi "mystical.ps" içinde tanımlıdır
- mystical: Bir dizi, yürütülebilir dizi veya sözlük alır; iç yapıyı da özyinelemeli olarak görselleştirir. Tüm görüntü, birim çembere sığacak şekilde ölçeklenir
- mystical_evoke: Bir isim alır, onu mevcut sözlükte bulur ve yukarıdaki gibi render eder
- mystical_evoke_label: İsim-def ligature sigilini ekler ve isim sigilinin dikey görünmesi için yönünü ayarlar
Bu fonksiyonların _unscaled sürümleri de vardır. Bu durumda ölçekleme yapılamadığı için halkalar çok büyük basılır
Yerleşim sorunları
- Mevcut kod, alt çemberlerin yerleşimini çakışma olmadan optimize eder; ancak muhafazakâr davrandığı için yerleşim gereğinden fazla yayılır
- Örnek görsellerde
mystical_get_spell,mystical_make_evocation_ligaturevb. ile ayrıştırma/yerleşim yapıldıktan sonra, görüntü draw_sigil ve draw_link fonksiyonlarıyla elle ayarlanarak üretilir - Gelecekte varsayılan yerleşim ayarlarının iyileştirilmesi planlanır
Programlama dili olarak Mystical
- Şu anda Mystical, PostScript programlarını çizen bir araçtır
- Mystical görüntülerini doğrudan yorumlayıp çalıştıran bir yorumlayıcı yoktur
- İnsanlar görüntüye bakarak PostScript kodunu anlayabilir ya da onu bir PostScript programı olarak yeniden yazarak çalıştırabilir
- Dil düzeyindeki tartışmalar sonraya bırakılmıştır
Başka dillere uygulanabilirlik
- FORTH gibi yalnızca operatörlerden oluşan dillerde kullanım potansiyeli yüksektir
- Yapısı daha karmaşık olan dillerde uygulandığında halka sayısının aşırı artması riski vardır
Bu sayfa 2025-05-16 tarihinde Denis tarafından oluşturuldu
1 yorum
Hacker News görüşleri