3 poin oleh GN⁺ 2025-05-18 | Belum ada komentar. | Bagikan ke WhatsApp
  • Mystical adalah cara notasi yang menggambar program PostScript dalam struktur melingkar yang tampak seperti lingkaran sihir; dalam dokumennya diperlakukan seperti bahasa, tetapi sebenarnya lebih dekat ke representasi visual PostScript
  • Struktur intinya adalah ring, yang membedakan array eksekusi {}, array non-eksekusi [], dan dictionary << >> dengan batas, bintang, segitiga, dan poligon
  • Teks dan sigil di tepi ring mengubah operator, variabel, keyword, string, dan nama PostScript menjadi simbol atau bentuk berhias
  • mystical.ps merender array, array eksekusi, dan dictionary menjadi gambar Mystical, sementara mystify.py membungkus program PostScript menjadi gambar Mystical selebar 8 inci pada halaman 8.5x11, serta mengonversi komentar
  • Saat ini tidak ada interpreter yang membaca gambar Mystical untuk melakukan komputasi; baru sebatas manusia dapat mengubah gambar menjadi PostScript lalu menjalankannya

Notasi yang menggambar PostScript seperti lingkaran sihir

  • Mystical berawal dari tujuan membuat bahasa pemrograman yang menyerupai lingkaran sihir
  • Dalam praktiknya, ini lebih dekat ke cara menulis atau menggambar PostScript agar terlihat seperti lingkaran sihir
  • Dokumen instalasi dan pengantar disediakan secara terpisah

Struktur berbasis ring

  • Program Mystical tersusun dari ring
  • Ring adalah pita melingkar dengan batas dalam dan luar, tempat teks dan sigil ditempatkan
  • Isi ring utama dimulai dari ujung kanan, yaitu arah jam 3, lalu mengalir berlawanan arah jarum jam
    • Ini mengikuti sistem sudut PostScript, sekaligus mencerminkan asumsi bahwa ring ditulis dari sisi luar
  • Ring turunan dimulai dari titik yang terhubung dengan struktur yang memanggilnya
  • Tiga tipe ring

    • Array eksekusi setara dengan { } di PostScript; memiliki batas lingkaran sederhana di bagian dalam dan luar, serta bentuk bintang di dalamnya
    • Titik awal dan akhir array eksekusi ditandai dengan simbol yang diambil dari lambang alkimia “pekerjaan selesai”
    • Array non-eksekusi setara dengan [ ] di PostScript; mirip dengan array eksekusi, tetapi tanpa bentuk bintang
    • Titik awal dan akhir array non-eksekusi ditandai dengan segitiga sederhana
    • Dictionary setara dengan << >> di PostScript; ditampilkan sebagai poligon dengan batas luar ganda dan batas dalam tunggal
    • Penanda titik awal dan akhir dictionary sama seperti array
    • Urutan item pada gambar dictionary bisa berbeda dari teks PostScript
      • Sebab di PostScript urutan penyisipan dictionary tidak dipertahankan
  • Struktur bersarang dan batasan

    • Jika satu struktur muncul di dalam struktur lain, sebuah garis keluar dari lingkaran kecil atau titik pada lokasi penyisipan dan terhubung ke sigil awal/akhir ring turunan
    • Di PostScript, [ ] atau << >> dapat digunakan dengan cara yang sulit diproses oleh Mystical
    • Bentuk yang memecah batas array di dalam conditional atau branch seperti pada contoh sebaiknya dihindari
    • Perintah seperti gsave/grestore dan begin/end berpotensi besar digunakan secara tidak seimbang atau melintasi loop, sehingga diperlakukan sebagai sigil biasa

Teks dan sigil

  • Di tepi ring ditempatkan teks atau sigil
  • Nama yang ditulis sebagai /name di PostScript ditampilkan di Mystical sebagai segitiga yang membungkus atau menimpa teks nama atau sigil
  • String PostScript () direpresentasikan sebagai bentuk cartouche yang berisi teks string
  • Sigil standar

    • Banyak operator bawaan memiliki sigil standar sendiri
    • Saat muncul sebagai operator atau nama, sigil digunakan sebagai pengganti teks, tetapi tidak diterapkan di dalam string
    • Sigil standar umumnya dibuat dengan menggabungkan huruf pertama perintah dan gambar konsepnya; sebagian memakai gambar yang lebih deskriptif atau bahasa visual terstandardisasi
    • Daftar lengkap dapat dilihat di Standard Sigils
    • Kategori operator yang dibahas sebagai contoh
      • dup, copy, add, mul, neg
      • for, forall, repeat
      • if, ifelse, operator perbandingan
      • moveto, lineto, arc, curveto, stroke, fill
      • gsave, grestore, translate, scale, rotate
      • Operator pengaturan dan pembacaan warna
      • dict, begin, end, def, get, put, length
  • Sigil pengguna

    • Sigil untuk fungsi atau nama baru dapat ditambahkan ke sigil_bank saat runtime
    • Sigil pengguna harus masuk ke dalam persegi 1 unit yang berpusat pada titik asal, dan nilai koordinat tidak boleh melebihi 0.5
    • Sistem koordinat dapat diubah demi kemudahan
    • Dengan memakai nstroke alih-alih stroke, efek kaligrafis seperti sigil standar dapat diperoleh
    • Sigil untuk variabel pengguna dapat dirancang dengan sistem sigil apa pun
    • Contohnya terutama menggunakan letter collision yang terinspirasi dari sistem Chaos Magick milik Spare
    • kameas, wheels, Square Word Calligraphy, Circular Gallifreyan, sitelen sitelen, gambar, permainan kata, dan lainnya juga dimungkinkan
    • Nama baru yang diturunkan dari operator resmi dapat memuat sigil standar milik operator tersebut

Notasi gabungan untuk /name { ring } def

  • def memiliki sigil tersendiri, tetapi pola mendorong nama, mendorong fungsi, lalu mendefinisikan fungsi pada nama itu sering muncul
  • Mystical menyediakan sintaks khusus untuk bentuk /name { ring } def
    • Menggunakan segitiga nama biasa
    • Ujung garis penghubung diletakkan tepat di bawah nama
    • Sigil def dihilangkan sepenuhnya
  • Sintaks ini juga diperluas ke dua tipe ring lainnya demi penyederhanaan
  • Saat def digunakan dengan cara lain, sigil def biasa tetap digunakan
  • Notasi gabungan serupa untuk /name { ring } di dalam dictionary sempat dipertimbangkan, tetapi tidak diterapkan karena berisiko tinggi diproses secara keliru

Cara menangani komentar

  • Komentar Mystical ditampilkan sebagai teks kecil di dalam balon ucapan tidak lengkap yang menunjuk ke titik tertentu dalam program
  • Komentar PostScript asli menghilang sebelum terlihat oleh renderer Mystical, sehingga mystify.py mengubah komentar menjadi urutan kode yang bisa dideteksi
  • Misalnya komentar seperti % Show a standard message, centered horizontally diubah menjadi bentuk berikut
    • (Show a standard message, centered horizontally) /mystical_comment_flag pop pop
  • Renderer dapat mendeteksi pola ini dan menampilkannya sebagai komentar Mystical

Contoh algoritme

  • Gambar di bagian atas halaman adalah contoh Quicksort
  • Contoh algoritme GCD Euclid juga disertakan
    • Contoh ini menggunakan fungsi /arg {exch def} def dari dmmlib

Fungsi pembuat gambar Mystical

  • Semua fungsi didefinisikan di mystical.ps
  • mystical
    • Menerima array, array eksekusi, dan dictionary, lalu merendernya dalam bentuk Mystical
    • Jika perlu, menggambar hingga ke struktur turunan
    • Seluruh gambar diskalakan agar pas dengan lingkaran unit
  • mystical_evoke
    • Sama seperti mystical, tetapi menerima nama yang akan dicari di dictionary saat ini sebagai input
  • mystical_evoke_label
    • Mirip dengan mystical_evoke, tetapi menambahkan notasi gabungan nama-definisi di bagian atas
    • Gambar diputar agar sigil nama terlihat tegak
  • Ketiga fungsi semuanya memiliki versi dengan akhiran _unscaled
    • Versi ini melewati tahap penskalaan
    • Karena ketebalan ring adalah 1 unit, gambarnya menjadi cukup besar
  • Cara penggunaan ada di Mystical usage notes

Program pembuat gambar Mystical

  • Program yang saat ini disediakan hanyalah satu skrip Python, mystify.py
  • mystify.py melakukan dua tugas
    • Membungkus seluruh program PostScript dengan kode yang menggambarnya sebagai program Mystical, dan menempatkannya di tengah halaman 8.5x11 dengan lebar 8 inci
    • Mengonversi baris komentar PostScript yang diawali % menjadi komentar Mystical
  • Komentar di bagian paling awal file tidak dikonversi
    • Contoh: %!PS
  • Baris komentar berdekatan dengan indentasi yang sama diperlakukan sebagai satu komentar panjang yang memuat line break
  • Batasan layout

    • Kode saat ini menghitung layout agar lingkaran turunan tidak saling bertabrakan
    • Perhitungannya terlalu aman, sehingga sebagian besar program bisa tersebar sangat lebar
    • Contoh halaman dibuat dengan menjalankan fungsi parsing dan layout mystical_get_spell, mystical_make_evocation_ligature, lalu menyesuaikan hasilnya dan memanggil draw_sigil, draw_link
    • Layout default direncanakan untuk diperbaiki

Apakah bisa dianggap sebagai bahasa

  • Saat ini Mystical adalah cara menggambar program PostScript
  • Tidak ada interpreter yang menerima gambar Mystical sebagai input lalu menjalankan komputasi yang sesuai
  • Manusia dapat membaca gambar Mystical dan menjalankannya, atau yang lebih realistis, manusia dapat mengubahnya menjadi program PostScript lalu menjalankannya

Kemungkinan penerapan ke bahasa lain

  • Pendekatan ini tampaknya juga bisa diterapkan pada bahasa yang hanya berisi operator, seperti Forth
  • Untuk bahasa dengan struktur kalimat yang lebih kompleks, penerapannya mungkin sulit
  • Belum jelas apakah membuat ring baru untuk setiap kurung kurawal atau indentasi akan membuatnya menjadi terlalu rumit

Unduhan

Belum ada komentar.

Belum ada komentar.