3 điểm bởi GN⁺ 2025-05-18 | 1 bình luận | Chia sẻ qua WhatsApp
  • Mystical là một cách độc đáo để trực quan hóa chương trình PostScript dưới dạng vòng tròn ma pháp
  • Cấu trúc lập trình được biểu diễn theo dạng vòng (ring), với nhiều kiểu như mảng thực thi, mảng không thực thi, từ điển, v.v.
  • Thông qua các biểu tượng đặc biệt gọi là sigil, lệnh, biến, chuỗi và các thành phần khác được thể hiện theo cách riêng biệt
  • Với các mẫu định nghĩa hoặc khai báo hàm, một dạng biểu diễn ligature riêng được áp dụng, đồng thời cũng hỗ trợ sigil tùy chỉnh của người dùng
  • Hiện tại đây là một công cụ chuyển chương trình PostScript thành hình ảnh đồ họa, chưa có trình thông dịch riêng

Tổng quan về Mystical

Mystical là một dự án thử nghiệm hướng tới một ngôn ngữ lập trình mang dáng dấp vòng tròn ma pháp. Trên thực tế, đây là một phương pháp biểu diễn mã PostScript bằng hình thức trực quan kiểu vòng tròn ma pháp, và trong tài liệu này phương pháp đó được gọi là “Mystical”.

Cấu trúc vòng (Rings)

  • Cấu trúc của Mystical lấy dạng vòng làm trung tâm
  • Mỗi vòng chứa chữ và sigil, đồng thời có đường biên bên trong và bên ngoài
  • Vòng chính của chương trình bắt đầu từ bên phải (hướng 3 giờ) và đi theo chiều ngược kim đồng hồ (widdershins). Điều này phản ánh quy tắc góc trong PostScript và quan niệm rằng vòng tròn ma pháp được viết từ ngoài vào trong
  • Các vòng con bắt đầu từ điểm tiếp xúc với vòng cha

Ba loại vòng

  • Mảng thực thi (Executable array): tương ứng với {} trong PostScript. Có đường biên tròn đơn ở trong và ngoài, kèm hình ngôi sao; điểm bắt đầu/kết thúc dùng biểu tượng dựa trên ký hiệu giả kim
  • Mảng không thực thi (Non-executable array): tương ứng với [] trong PostScript. Không có hình ngôi sao, dùng tam giác cho điểm bắt đầu/kết thúc
  • Từ điển (Dictionary): tương ứng với <<>> trong PostScript. Có dạng đa giác với đường biên ngoài kép và đường biên trong đơn. Ký hiệu bắt đầu/kết thúc giống như trên

Khi một cấu trúc khác nằm bên trong vòng, nó được nối bằng chấm nhỏ hoặc đường nối để trực quan hóa phân cấp

Các hạn chế khi dùng PostScript

  • Trong PostScript, có thể dùng [ ] hoặc << >> theo cách không được phép theo quy tắc của Mystical, nên không được khuyến nghị
  • gsave/grestore, begin/end v.v. thường được dùng trong các cấu trúc mất cân đối hơn, nên được xử lý như sigil thông thường

Văn bản và sigil

  • Trên viền vòng sẽ đặt ký tự hoặc sigil (biểu tượng đặc biệt)
  • Sigil biểu thị toán tử, biến, từ khóa
  • /name trong PostScript được biểu diễn bằng tên hoặc sigil bên trong tam giác, còn chuỗi () được biểu diễn dưới dạng cuộn giấy

Sigil chuẩn (Standard Sigils)

  • sigil riêng cho nhiều toán tử dựng sẵn
  • Chúng thường được thiết kế dựa trên chữ cái đầu của lệnh, hình ảnh của khái niệm, hoặc một ngôn ngữ thị giác riêng

Ví dụ: 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, v.v.

Sigil người dùng (User Sigils)

  • Có thể thêm vào sigil_bank trong thời gian chạy cho hàm mới hoặc tên mới
  • Cần được thiết kế trong một ô vuông 1 đơn vị (có thể biến đổi tọa độ)
  • Khi dùng nstroke, có thể tạo hiệu ứng nét giống với sigil hiện có
  • Sigil cho biến người dùng có thể được tạo theo nhiều cách khác nhau (chồng chữ, các ngôn ngữ thị giác đa dạng, v.v.)
  • Tên mới dựa trên toán tử chính thức có thể được kết hợp với sigil chuẩn

Ligature cho /name { ring } def

  • Cung cấp sigil đặc biệt cho các mẫu thường dùng như định nghĩa hàm
  • Chỉ hiển thị đường nối bên dưới tam giác tên, và lược bỏ sigil def riêng
  • Có thể áp dụng cho cả ba kiểu vòng
  • Các cách dùng def khác được xử lý như sigil thông thường
  • Chỉ áp dụng bên trong mảng thực thi; không hỗ trợ trong từ điển vì có thể gây nhầm lẫn khi sử dụng

Thuật toán mẫu

Hình phía trên là ví dụ về Quicksort

Cũng có ví dụ về thuật toán ƯCLN Euclid (GCD). Ví dụ này sử dụng hàm người dùng /arg {exch def} def

Hàm tạo ảnh Mystical

Tất cả đều được định nghĩa trong "mystical.ps"

  • mystical: nhận một mảng, mảng thực thi hoặc từ điển, rồi trực quan hóa đệ quy cả cấu trúc bên trong. Toàn bộ hình ảnh được co giãn để khớp với đường tròn đơn vị
  • mystical_evoke: nhận một tên, tìm nó trong từ điển hiện tại và kết xuất như trên
  • mystical_evoke_label: thêm ligature tên-def, đồng thời điều chỉnh hướng để sigil tên hiển thị theo phương dọc

Các hàm này cũng có phiên bản _unscaled. Trong trường hợp đó không thể co giãn, nên các vòng sẽ được in ra rất lớn

Vấn đề bố cục

  • Mã hiện tại tối ưu vị trí các vòng con để tránh chồng lấn, nhưng khá bảo thủ nên bố cục bị trải ra quá mức
  • Trong hình ví dụ, sau khi phân tích cú pháp/bố trí bằng mystical_get_spell, mystical_make_evocation_ligature v.v., hình được xuất ra bằng cách chỉnh tay trực tiếp với các hàm draw_sigil, draw_link
  • Dự kiến sẽ cải thiện thiết lập mặc định của bố cục trong tương lai

Mystical như một ngôn ngữ lập trình

  • Hiện tại Mystical là công cụ để vẽ chương trình PostScript
  • Không có trình thông dịch để tự giải thích và thực thi chính hình ảnh Mystical
  • Con người xem hình ảnh để hiểu mã PostScript, hoặc viết lại thành chương trình PostScript để chạy
  • Phần thảo luận như một ngôn ngữ sẽ được để lại cho sau này

Khả năng áp dụng cho ngôn ngữ khác

  • Với những ngôn ngữ chỉ gồm toán tử như FORTH, tiềm năng áp dụng là khá lớn
  • Với các ngôn ngữ có cấu trúc phức tạp hơn, có nguy cơ số lượng vòng trở nên quá nhiều

tải từ github


tải từ codeberg


Trang này được Denis tạo vào ngày 2025-05-16

1 bình luận

 
GN⁺ 2025-05-18
Ý kiến trên Hacker News
  • Cảm giác gợi nhớ đến anime Nhật Bản Dennō Coil, nhắc tới cảnh bọn trẻ vẽ chương trình xuống sàn gần như y hệt tác giả rồi thi triển như ma thuật, và đánh giá là rất đáng xem
    • Chia sẻ rằng bản thân cũng thực sự rất thích tác phẩm đó, vì nó cho thấy rất rõ cách trẻ con tiếp nhận công nghệ mới khác với người lớn như thế nào, thậm chí còn là một màn dàn dựng tiên phong đi trước cả Google Glass khoảng 5 năm
    • Cũng đã vào đây với đúng suy nghĩ đó, và ca ngợi đây là một tác phẩm thực sự xuất sắc
  • Châm biếm đầy hài hước theo kiểu hiện thực về cảnh hô thần chú hay làm nghi thức trong game, với lời khấn rằng “đã gọi nữ thần của mặt trăng đỏ, đã chuẩn bị bàn thờ, đã nạp tinh thể rồi, xin lần này hãy boot lên cho tôi”
    • Thêm một câu đùa nghi thức nữa là bảo dẹp nến ra khỏi chồng sách kinh
  • Nhận xét đây là một ngôn ngữ lập trình mà nhân vật chính isekai trong loạt blog "Xing the technical interview" của Aphyr hẳn sẽ thích, đề cử rằng nó rất xứng đáng được đưa vào loạt bài này, đồng thời chia sẻ liên kết tham khảo liên quan
    • Phản hồi rằng trước đó chưa biết đến loạt bài này, và đánh giá nó thực sự rất thú vị
  • Đề cử một thread thảo luận trên Reddit về UFO liên quan đến chương trình reverse engineering của Isaac và Caret, cùng ý kiến thúc giục đào sâu hơn nữa
  • Bày tỏ rằng tác phẩm này quá ấn tượng, hỏi về giấy phép, và kỳ vọng rằng nếu áp dụng một phong cách Forth chỉ dùng đệ quy thuần túy cho dự án phái sinh thì nó sẽ cực kỳ hợp với hệ thống phép thuật còn thiếu phần trực quan trong game mà họ đang làm; cho rằng Mystical là lời giải giúp cấu trúc hóa ma pháp trong game, vừa cho phép người chơi tự viết vừa giữ được cảm giác nhập vai
    • Trong game Noita cũng có một hệ thống tạo phép tương tự, giới thiệu hệ thống đũa phép nơi có thể áp dụng lặp, nhân, sao chép... theo kiểu lập trình, và cung cấp liên kết Steam của game
  • Trích một đoạn từ bài thơ "Black Perl" nổi tiếng trong giới Perl như một ví dụ về sự hòa quyện tuyệt vời giữa nghi thức ma thuật và câu lệnh lập trình
  • Cho rằng ngôn ngữ lập trình này thực ra khá thực dụng; trong số các esolang chú trọng thẩm mỹ thì hiếm có cái nào vừa dễ đọc vừa dễ dùng đến vậy; nghĩ rằng ý tưởng này cũng có thể áp dụng cho họ Lisp, ngôn ngữ dựa trên stack, ngôn ngữ mảng...; và nếu kết hợp với một editor có cấu trúc phù hợp thì mã có thể đủ ngắn gọn, mạch lạc để dùng cả cho phát triển phần mềm thực tế
  • Chia sẻ trải nghiệm rằng PostScript là một ngôn ngữ mạnh đến mức chỉ với ký pháp hậu tố cũng đủ “tái cấu trúc bộ não”, và khen việc kết hợp thêm phần hình ảnh thẩm mỹ ở đây là rất mới mẻ
    • Hỏi xin gợi ý về những ngôn ngữ rèn não tương tự khác, bày tỏ mong muốn được học lướt qua nhiều ngôn ngữ như ps hay lisp dù chỉ trong thời gian ngắn
  • Nghĩ rằng cách làm này có thể có nhiều công dụng khác nhau, ví dụ dùng như một dạng mã QR đẹp mắt hơn; việc tự động giải mã có thể hơi khó, nhưng rất thích sự kết hợp giữa cảm quan thẩm mỹ và logic
  • Cung cấp thông tin rằng nếu muốn tìm hiểu thêm về chaos magick và những kiến thức cơ bản về sigil spell, thì có thể tham khảo Psychonaut Field Manual