3 puan yazan GN⁺ 2025-05-18 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Mystical, PostScript programlarını büyü çemberine benzeyen dairesel bir yapıda çizen bir gösterim biçimidir; belgede bir dil gibi ele alınsa da gerçekte PostScript’in görsel bir temsiline daha yakındır
  • Temel yapı ring’dir; çalıştırılabilir diziler {}, çalıştırılamayan diziler [] ve sözlükler << >>, kenarlıklar, yıldızlar, üçgenler ve çokgenlerle ayırt edilir
  • Ring kenarındaki metinler ve sigil’ler, PostScript operatörlerini, değişkenlerini, anahtar sözcüklerini, dizelerini ve adlarını sembollere ya da süslü biçimlere dönüştürür
  • mystical.ps dizileri, çalıştırılabilir dizileri ve sözlükleri Mystical görselleri olarak render eder; mystify.py ise PostScript programlarını 8.5x11 sayfada 8 inç genişliğinde Mystical çizimle sarar ve yorumları da dönüştürür
  • Şu anda Mystical görsellerini okuyup hesaplama yapan bir yorumlayıcı yoktur; ancak bir insanın görseli PostScript’e çevirip çalıştırabileceği düzeydedir

PostScript’i büyü çemberi gibi çizen gösterim

  • Mystical, büyü çemberini andıran bir programlama dili yapma hedefinden doğdu
  • Gerçekte ise PostScript yazmanın ya da çizmenin, büyü çemberine benzeyen bir yoluna daha yakındır
  • Kurulum ve başlangıç belgeleri ayrıca sunulur

Ring tabanlı yapı

  • Mystical programları ring’lerden oluşur
  • Ring, iç ve dış kenarlığı olan dairesel bir şerittir; içinde metinler ve sigil’ler yer alır
  • Ana ring’in içeriği, sağ uç olan saat 3 yönünden başlar ve saat yönünün tersine akar
    • PostScript’in açı sistemini izler; ayrıca ring’in dış taraftan yazıldığı varsayımını da yansıtır
  • Alt ring’ler, kendilerini çağıran yapıya bağlandıkları noktadan başlar
  • Üç ring türü

    • Çalıştırılabilir dizi, PostScript’teki { } karşılığıdır; içinde ve dışında basit dairesel kenarlıklar bulunur ve içinde yıldız şekli yer alır
    • Çalıştırılabilir dizinin başlangıç ve bitiş noktaları, simyadaki “iş tamamlandı” sembolünden alınan bir sembolle gösterilir
    • Çalıştırılamayan dizi, PostScript’teki [ ] karşılığıdır; çalıştırılabilir diziye benzer ama yıldız şekli yoktur
    • Çalıştırılamayan dizinin başlangıç ve bitiş noktaları basit üçgenlerle gösterilir
    • Sözlük, PostScript’teki << >> karşılığıdır; çift dış kenarlık ve tek iç kenarlığa sahip bir çokgen olarak gösterilir
    • Sözlüğün başlangıç ve bitiş noktası işaretleri dizilerle aynıdır
    • Sözlük görselindeki öğe sırası, PostScript metninden farklı olabilir
      • Çünkü PostScript’te sözlüğe ekleme sırası korunmaz
  • İç içe yapılar ve kısıtlar

    • Bir yapı başka bir yapının içinde göründüğünde, içerme noktasındaki küçük daireden ya da noktadan bir çizgi çıkar ve alt ring’in başlangıç-bitiş sigil’ine bağlanır
    • PostScript’te [ ] veya << >>, Mystical’ın işlemesini zorlaştıracak biçimlerde kullanılabilir
    • Örnekteki gibi dizi sınırlarını koşullu ifadeler ya da dallanmalar içinde bölmekten kaçınmak gerekir
    • gsave/grestore, begin/end gibi komutlar dengesiz kullanılmaya ya da döngüleri keserek geçmeye daha yatkın olduğundan normal sigil olarak ele alınır

Metin ve sigil’ler

  • Ring’in kenarında metin veya sigil yer alır
  • PostScript’te /name olarak yazılan adlar, Mystical’da ad metnini ya da sigil’i saran veya onunla örtüşen bir üçgen ile gösterilir
  • PostScript dizeleri (), dize metnini içeren bir kartuş biçimiyle ifade edilir
  • Standart sigil’ler

    • Birçok yerleşik operatörün kendi standart sigil’i vardır
    • Operatör ya da ad olarak göründüklerinde metin yerine sigil kullanılır; ancak dizelerin içinde uygulanmaz
    • Standart sigil’ler çoğunlukla komutun ilk harfi ile kavrama ait bir çizimin birleşiminden oluşturulmuştur; bazıları ise daha açıklayıcı çizimler ya da standartlaştırılmış bir görsel dil kullanır
    • Tam liste Standard Sigils sayfasında görülebilir
    • Örneklerde ele alınan operatör kategorileri
      • dup, copy, add, mul, neg
      • for, forall, repeat
      • if, ifelse, karşılaştırma operatörleri
      • moveto, lineto, arc, curveto, stroke, fill
      • gsave, grestore, translate, scale, rotate
      • Renk ayarlama ve sorgulama operatörleri
      • dict, begin, end, def, get, put, length
  • Kullanıcı sigil’leri

    • Yeni fonksiyonların veya adların sigil’leri çalışma zamanında sigil_bank’e eklenebilir
    • Kullanıcı sigil’leri, merkezi orijin olan 1 birimlik kare içine sığmalıdır; koordinat değerleri 0.5’i aşmamalıdır
    • Kolaylık için koordinat sistemi dönüştürülebilir
    • stroke yerine nstroke kullanılırsa standart sigil’lerle aynı kaligrafik etki elde edilir
    • Kullanıcı değişkenlerine yönelik sigil’ler herhangi bir sigil sistemiyle tasarlanabilir
    • Örnekler çoğunlukla Spare’in Chaos Magick sisteminden esinlenen letter collision kullanır
    • kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, çizimler, kelime oyunları vb. de mümkündür
    • Resmî operatörlerden türetilen yeni adlar, ilgili operatörün standart sigil’ini içerebilir

/name { ring } def için birleşik gösterim

  • def için ayrı bir sigil vardır; ancak bir adı push edip, bir fonksiyonu push ettikten sonra o ada fonksiyonu tanımlama kalıbı sıkça görülür
  • Mystical, /name { ring } def biçimi için özel sözdizimi sağlar
    • Normal ad üçgeni kullanılır
    • Bağlantı çizgisinin ucu adın hemen altına yerleştirilir
    • def sigil’i tamamen atlanır
  • Bu sözdizimi, basitleştirme amacıyla diğer iki ring türüne de genişletilmiştir
  • def başka biçimlerde kullanıldığında normal def sigil’i aynen kullanılır
  • Sözlük içindeki /name { ring } için de benzer bir birleşik gösterim düşünülmüştü, ancak yanlış işlenme olasılığı yüksek olduğu için uygulanmadı

Yorumların işlenme biçimi

  • Mystical yorumları, program içindeki belirli bir noktayı işaret eden tamamlanmamış konuşma balonu içindeki küçük metin olarak gösterilir
  • Gerçek PostScript yorumları Mystical renderer görmeden önce kaybolduğundan, mystify.py yorumları algılanabilir kod dizilerine dönüştürür
  • Örneğin % Show a standard message, centered horizontally gibi bir yorum şu biçime dönüştürülür
    • (Show a standard message, centered horizontally) /mystical_comment_flag pop pop
  • Renderer bu kalıbı algılayıp Mystical yorumu olarak gösterebilir

Örnek algoritmalar

  • Sayfanın üst kısmındaki çizim Quicksort örneğidir
  • Euclid’in GCD algoritması örneği de dahildir
    • Bu örnek dmmlib’in /arg {exch def} def fonksiyonunu kullanır

Mystical görsel oluşturma fonksiyonları

  • Tüm fonksiyonlar mystical.ps içinde tanımlıdır
  • mystical
    • Dizileri, çalıştırılabilir dizileri ve sözlükleri alıp Mystical biçimde render eder
    • Gerekirse alt yapılara inerek çizer
    • Tüm görsel birim çember içine sığacak şekilde ölçeklenir
  • mystical_evoke
    • mystical ile aynıdır; ancak girdi olarak geçerli sözlükte aranacak adı alır
  • mystical_evoke_label
    • mystical_evoke’a benzer; ancak üst tarafa ad-tanım birleşik gösterimini ekler
    • Ad sigil’i düz görünecek şekilde görseli döndürür
  • Üç fonksiyonun da _unscaled ekli sürümleri vardır
    • Bu sürümler ölçekleme adımını atlar
    • Ring kalınlığı 1 birim olduğundan görsel oldukça büyür
  • Kullanım Mystical usage notes sayfasındadır

Mystical görsel oluşturma programı

  • Şu anda sunulan program, tek bir Python betiği olan mystify.py’dir
  • mystify.py iki iş yapar
    • PostScript programının tamamını Mystical programı çizen kodla sarar ve 8.5x11 sayfanın ortasına 8 inç genişliğinde yerleştirir
    • % ile başlayan PostScript yorum satırlarını Mystical yorumlarına dönüştürür
  • Dosyanın en başındaki yorum dönüştürülmez
    • Örn: %!PS
  • Aynı girintiye sahip bitişik yorum satırları, satır sonları içeren tek bir uzun yorum olarak işlenir
  • Yerleşim kısıtları

    • Mevcut kod, alt çemberlerin çakışmaması için yerleşimi hesaplar
    • Hesaplama aşırı güvenli olduğundan çoğu program çok geniş yayılabilir
    • Sayfa örneği, ayrıştırma ve yerleşim fonksiyonları olan mystical_get_spell, mystical_make_evocation_ligature çalıştırıldıktan sonra sonucu ayarlayıp draw_sigil, draw_link çağrılarak oluşturulmuştur
    • Varsayılan yerleşimin iyileştirilmesi planlanıyor

Dil olarak görülebilir mi

  • Şu anda Mystical, PostScript programlarını çizmenin bir yoludur
  • Mystical görsellerini girdi olarak alıp uygun hesaplamayı yapan bir yorumlayıcı yoktur
  • Bir insan Mystical görselini okuyup çalıştırabilir; daha olası olarak da bunu bir PostScript programına çevirip sonra çalıştırabilir

Başka dillere uygulanabilirlik

  • Bu yaklaşım, Forth gibi yalnızca operatörlerden oluşan diller için de uygulanabilir görünüyor
  • Daha karmaşık cümle yapısına sahip dillere uygulanması zor olabilir
  • Süslü parantezler ya da her girinti için yeni bir ring oluşturmanın aşırı karmaşık hale gelip gelmeyeceği bilinmiyor

İndirme

Henüz yorum yok.

Henüz yorum yok.