3 puan yazan GN⁺ 2025-05-18 | 1 yorum | WhatsApp'ta paylaş
  • 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/end gibi 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_bank içine ekleme yapılabilir
  • Tasarımın 1 birimlik kare içine sığması gerekir (koordinat dönüşümü yapılabilir)
  • nstroke kullanı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ı def sigili atlanır
  • Üç halka türünün tamamına uygulanabilir
  • Bunun dışındaki def kullanı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_ligature vb. 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

github'dan indir


codeberg'den indir


Bu sayfa 2025-05-16 tarihinde Denis tarafından oluşturuldu

1 yorum

 
GN⁺ 2025-05-18
Hacker News görüşleri
  • Japon animasyonu Dennō Coil'i hatırlatan bir izlenim; çocukların neredeyse yazarla tamamen aynı şekilde programları yere çizip sihir gibi kullandığı sahnelere değiniliyor ve güçlü bir tavsiye yapılıyor
    • O eseri gerçekten çok sevdiğini paylaşan bir yorum; çocukların yeni teknolojileri yetişkinlerden farklı biçimde benimsemesini çok iyi gösterdiğini ve hatta Google Glass'tan bile 5 yıl önce gelen öncü bir anlatım olduğunu söylüyor
    • Aynı düşünceyle geldiğini ve bunun gerçekten harika bir eser olduğunu övüyor
  • Oyunlarda büyü ya da ritüel haykırma durumunu gerçekçi bir mizahla hicvederek, "kızıl ayın tanrıçasını çağırdım, sunağı da hazırladım, kristalleri de şarj ettim, ne olur bu kez boot et" diye yakaran bir içerik
    • Kutsal kitap yığınının üstündeki mumları kaldırma yönünde ek bir ritüel şakası
  • Aphyr'nin "Xing the technical interview" blog serisindeki isekai kahramanının sevebileceği türden bir programlama dili olduğu yorumu; bu seride mutlaka yer almayı hak ettiğini öneriyor ve ilgili bir referans bağlantıyı paylaşıyor
    • Bu seriyi bilmediğine dair bir tepki ve gerçekten eğlenceli olduğu değerlendirmesi
  • Isaac ve Caret reverse engineering programıyla ilgili UFO Reddit tartışma başlığını öneriyor, daha derine inmeyi teşvik eden bir görüş
  • Bu çalışmanın inanılmaz derecede etkileyici olduğunu söyleyip lisansı soruyor; türev bir projede yalnızca saf özyineleme kullanan forth tarzı bir yaklaşım uygulanırsa, şu anda üzerinde çalıştığı oyundaki yeterince görselleşmemiş büyü sistemi için mükemmel olacağını düşünüyor; Mystical'ın oyun içi büyüyü yapılandırarak hem kullanıcıların yazma biçimine hem de sürükleyiciliğe hitap eden bir çözüm olduğu kanaatinde
    • Noita oyununda da benzer bir büyü oluşturma sistemi bulunduğunu, tekrar, çarpma, kopyalama gibi işlemleri programlama mantığıyla uygulayabilen bir wand sistemi olduğunu tanıtıyor ve oyunun Steam bağlantısını veriyor
  • Perl ile ünlü "Black Perl" şiirinden bir bölümü alıntılayarak, büyü ritüeli ile programlama komutlarının mükemmel biçimde iç içe geçtiği bir örnek paylaşıyor
  • Bu programlama dilinin aslında oldukça pratik olduğu görüşü; estetiğe odaklanan esolang'lar arasında bu kadar okunabilir ve kullanımı kolay olanların nadir olduğu değerlendiriliyor; bu fikrin Lisp türevleri, stack tabanlı diller ve array dillerine de uygulanabileceğini düşünüyor; uygun yapılandırılmış bir editörle birleşirse gerçek yazılım geliştirmede de işe yarayacak kadar kodun kısa ve düzenli olabileceği görüşünde
  • PostScript'in yalnızca postfix notation ile bile beyni yeniden kablolayacak kadar güçlü bir dil olduğu hissini yaşadığını paylaşıyor; buna estetik görsellerin eklenmesini tazeleyici bulup övüyor
    • Benzer şekilde zihni çalıştıran başka diller için öneri istiyor; ps ya da lisp gibi çeşitli dilleri kısa da olsa öğrenmek istediğini dile getiriyor
  • Bu yaklaşımın farklı kullanım alanları olabileceğini düşünüyor; örneğin daha güzel görünen QR kod biçimlerinde kullanılabileceğini, otomatik çözümlemenin biraz zor olabileceğini ama estetikle mantığın birleşimini sevdiğini söylüyor
  • chaos magick ve sigil büyülerinin temelleri hakkında daha fazla bilgi edinmek isteyenlere Psychonaut Field Manual'a bakmalarını öneren bir bilgi paylaşıyor