3 पॉइंट द्वारा GN⁺ 2025-05-18 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • मिस्टिकल PostScript प्रोग्रामों को जादुई वृत्त जैसी आकृति में visualise करने का एक अनोखा तरीका है
  • यह programming structure को रिंग (ring) के रूप में दर्शाता है, और इसमें executable array, non-executable array, dictionary जैसी कई types हैं
  • sigil नाम के विशेष symbols के ज़रिए commands, variables, strings आदि को मौलिक ढंग से दिखाया जाता है
  • definition patterns या function declarations के लिए अलग ligature अभिव्यक्ति लागू होती है, और user-custom sigils भी समर्थित हैं
  • फिलहाल यह PostScript प्रोग्रामों को graphic images में बदलने वाला टूल है; इसका अपना interpreter मौजूद नहीं है

मिस्टिकल(Mystical) परिचय

मिस्टिकल एक प्रयोगात्मक प्रोजेक्ट है जिसका लक्ष्य जादुई वृत्त जैसा दिखने वाली programming language बनाना है। व्यवहार में यह PostScript code को जादुई वृत्त के रूप में visualise करने की एक विधि है, और इस दस्तावेज़ में इस विधि को 'मिस्टिकल' नाम दिया गया है।

रिंग (Rings) संरचना

  • मिस्टिकल की संरचना का केंद्र रिंग का रूप है
  • हर रिंग में अक्षर और sigils होते हैं, और इसकी अंदरूनी व बाहरी boundary lines होती हैं
  • प्रोग्राम की मुख्य रिंग दाईं ओर (3 बजे की दिशा) से शुरू होकर घड़ी की उलटी दिशा (widdershins) में चलती है। यह PostScript के angle rules और इस विचार को दर्शाती है कि जादुई वृत्त बाहर से अंदर की ओर लिखे जाते हैं
  • उप-रिंग अपने parent ring के संपर्क-बिंदु से शुरू होती हैं

रिंग के तीन प्रकार

  • Executable array : PostScript के {} के बराबर। अंदर और बाहर सरल वृत्ताकार boundary, star shape, और शुरुआत/समाप्ति पर alchemical symbols पर आधारित चिन्ह इस्तेमाल होते हैं
  • Non-executable array : PostScript के [] के बराबर। इसमें star shape नहीं होती, और शुरुआत/समाप्ति के लिए triangle इस्तेमाल होते हैं
  • Dictionary : PostScript के <<>> के बराबर। बहुभुजाकार रूप, दोहरी बाहरी boundary और एकल अंदरूनी boundary। शुरुआत/समाप्ति के संकेत समान हैं

जब किसी रिंग के भीतर दूसरी संरचना आती है, तो उसे छोटे बिंदु या रेखा से जोड़ा जाता है ताकि hierarchy को दृश्य रूप में दिखाया जा सके

PostScript उपयोग से जुड़ी सीमाएँ

  • PostScript में [ ] या << >> को ऐसे तरीकों से इस्तेमाल किया जा सकता है जो मिस्टिकल के नियमों के अनुसार मान्य नहीं हैं, इसलिए उनकी सिफारिश नहीं की जाती
  • gsave/grestore, begin/end आदि असंतुलित संरचनाओं में ज़्यादा उपयोग होते हैं, इसलिए इन्हें सामान्य sigils के रूप में संभाला जाता है

टेक्स्ट और sigils

  • रिंग की किनारी पर अक्षर या sigils (विशेष symbols) रखे जाते हैं
  • sigils operators, variables, keywords को दर्शाते हैं
  • PostScript का /name triangle के भीतर name या sigil के रूप में, और string () scroll के आकार में दिखाई जाती है

Standard Sigils

  • कई built-in operators के लिए अद्वितीय sigils मौजूद हैं
  • इन्हें आम तौर पर command के initials, concept की छवि, या visual language के आधार पर design किया जाता है

उदाहरण: 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 आदि

User Sigils

  • नई functions या names के लिए runtime में sigil_bank में जोड़ा जा सकता है
  • इन्हें 1-unit square के भीतर design करना होता है (coordinate transform संभव है)
  • nstroke का उपयोग करने पर मौजूदा sigils जैसा ही typographic effect मिल सकता है
  • user variables के sigils अलग-अलग तरीकों से बनाए जा सकते हैं (अक्षरों की परतें, अलग visual languages आदि)
  • आधिकारिक operators पर आधारित नए names को standard sigils के साथ जोड़ा जा सकता है

/name { ring } def ligature sigil

  • function definition जैसे अक्सर उपयोग होने वाले patterns के लिए विशेष sigil दिया गया है
  • name triangle के नीचे केवल connecting line दिखाई जाती है, और अलग def sigil छोड़ दिया जाता है
  • यह तीनों रिंग types पर लागू हो सकता है
  • अन्य def उपयोग सामान्य sigil के रूप में दिखाए जाते हैं
  • यह केवल executable array के भीतर लागू होता है; dictionary के भीतर उपयोग में भ्रम की संभावना होने के कारण उपलब्ध नहीं है

sample algorithm

ऊपर की छवि Quicksort का उदाहरण है

Euclid के greatest common divisor (GCD) algorithm का उदाहरण भी दिया गया है। इस उदाहरण में user function /arg {exch def} def का उपयोग किया गया है

मिस्टिकल image generation functions

सभी "mystical.ps" में परिभाषित हैं

  • mystical: array, executable array, या dictionary लेकर उसकी भीतरी संरचना तक recursively visualise करता है। पूरी image को unit circle के अनुसार scale किया जाता है
  • mystical_evoke: कोई name लेकर current dictionary में उसे खोजता है और ऊपर की तरह render करता है
  • mystical_evoke_label: name-def ligature sigil जोड़ता है, और दिशा इस तरह समायोजित करता है कि name sigil vertical दिखाई दे

इन functions के _unscaled versions भी मौजूद हैं। इस स्थिति में scale नहीं हो पाता, इसलिए रिंग बहुत बड़े आकार में output होती हैं

layout समस्याएँ

  • मौजूदा code sub-circles की placement को टकराव से बचाते हुए optimize करता है, लेकिन यह काफ़ी conservative है, इसलिए layout ज़रूरत से ज़्यादा फैल जाता है
  • उदाहरण चित्र में mystical_get_spell, mystical_make_evocation_ligature आदि से parsing/layout के बाद, draw_sigil, draw_link functions के ज़रिए चित्र को manually adjust करके output किया गया है
  • भविष्य में layout की default settings बेहतर की जाएँगी

programming language के रूप में मिस्टिकल

  • फिलहाल मिस्टिकल PostScript प्रोग्रामों को draw करने वाला टूल है
  • मिस्टिकल images को खुद interpret और execute करने वाला कोई interpreter नहीं है
  • कोई व्यक्ति image देखकर PostScript code समझ सकता है, या उसे PostScript program के रूप में फिर से लिखकर चला सकता है
  • भाषा-संबंधी चर्चा को आगे के लिए टाला गया है

दूसरी भाषाओं पर लागू होने की संभावना

  • FORTH जैसी केवल operators पर आधारित भाषाओं में इसकी उपयोगिता काफ़ी हो सकती है
  • अधिक जटिल संरचना वाली भाषाओं में इसे लागू करने पर रिंगों की संख्या अत्यधिक बढ़ सकती है

github से डाउनलोड करें


codeberg से डाउनलोड करें


यह पृष्ठ 2025-05-16 को Denis द्वारा बनाया गया

1 टिप्पणियां

 
GN⁺ 2025-05-18
Hacker News की राय
  • इसे देखकर जापानी एनीमे Dennō Coil की याद आई; इसमें वह दृश्य याद आता है जहाँ बच्चे लगभग लेखक की तरह ही फर्श पर प्रोग्राम बनाकर उन्हें जादू की तरह चलाते हैं, इसलिए ज़ोरदार सिफारिश
    • साझा किया कि उन्हें वह कृति बहुत पसंद थी; उसमें यह बहुत अच्छे से दिखाया गया था कि बच्चे नई तकनीक को बड़ों से अलग तरीके से अपनाते हैं, और वह तो google glass से भी 5 साल पहले का अग्रणी प्रस्तुतीकरण लगा
    • कहा कि वे भी बिल्कुल यही सोचकर आए थे, और यह सचमुच एक शानदार कृति है
  • गेम में जादू या अनुष्ठान पुकारने वाली स्थितियों का यथार्थवादी हास्य से व्यंग्य करते हुए प्रार्थना: "लाल चाँद की देवी को पुकार लिया है, वेदी भी तैयार है, और crystal भी charge कर दिए हैं, तो कृपया इस बार boot हो जाओ"
    • इसके साथ एक और अनुष्ठान वाला मज़ाक कि धर्मग्रंथों के ढेर से मोमबत्तियाँ हटा दो
  • Aphyr की "Xing the technical interview" ब्लॉग श्रृंखला के isekai नायक को पसंद आने वाली programming language जैसा लगा; कहा गया कि यह उस श्रृंखला में ज़रूर शामिल होने लायक है, और संबंधित संदर्भ लिंक भी साझा किया गया
    • जवाब में कहा गया कि उन्हें उस श्रृंखला के बारे में पता नहीं था, और यह वाकई बहुत मज़ेदार है
  • Isaac और Caret reverse engineering प्रोग्राम से जुड़ी UFO Reddit चर्चा थ्रेड की सिफारिश, और अधिक गहराई से खोजबीन करने के लिए उकसाने वाली राय
  • यह काम बहुत ही अद्भुत है; license के बारे में पूछते हुए कहा गया कि अगर एक derivative project के रूप में केवल pure recursion इस्तेमाल करने वाला forth-style रूप अपनाया जाए, तो यह उनकी वर्तमान game में visualisation की कमी वाले magic system के लिए एकदम उपयुक्त होगा; उनका मानना है कि Mystical game के भीतर magic को संरचित करके user द्वारा लिखे जाने और immersion—दोनों जरूरतें पूरी करने वाला समाधान है
    • बताया गया कि Noita गेम में भी इसी तरह का magic crafting system है; एक wand system का परिचय दिया गया जिसमें programming की तरह repeat, multiply, duplicate आदि लागू किए जा सकते हैं, और गेम का Steam लिंक भी दिया गया
  • Perl के लिए मशहूर "Black Perl" कविता का एक अंश उद्धृत करते हुए ऐसा उदाहरण साझा किया गया जहाँ magical ritual और programming command बेहद खूबसूरती से मिलते हैं
  • राय दी गई कि यह programming language वास्तव में काफ़ी उपयोगी भी है; aesthetics पर ज़ोर देने वाली esolang (विचित्र भाषा) में इतना पढ़ने योग्य और इस्तेमाल में आसान उदाहरण कम मिलता है; ऐसा भी सोचा गया कि यह विचार Lisp-परिवार, stack-based, array language आदि पर भी लागू हो सकता है; और उचित structured editor के साथ मिलकर यह वास्तविक software development में भी काम आ सकता है, क्योंकि code बेहद संक्षिप्त और एक नज़र में समझ आने वाला हो सकता है
  • साझा किया गया कि PostScript केवल postfix notation से ही दिमाग़ को नए सिरे से ढाल देने जितनी शक्तिशाली भाषा लगी; उसके साथ aesthetic visual जुड़ना एक ताज़गी भरी बात है
    • इसी तरह की दूसरी brain-training languages की सिफारिश माँगी गई; कहा गया कि वे ps या lisp जैसी अलग-अलग भाषाओं को थोड़ा-थोड़ा ही सही, सीखकर देखना चाहते हैं
  • यह भी कहा गया कि इस तरीके के कई उपयोग हो सकते हैं; उदाहरण के लिए इसे और सुंदर QR code के रूप में इस्तेमाल किया जा सकता है; automatic decoding थोड़ा मुश्किल हो सकता है, लेकिन aesthetics और logic का मेल बहुत पसंद आया
  • अगर chaos magick और sigil spell की बुनियाद के बारे में और जानना हो, तो Psychonaut Field Manual देखने की सलाह दी गई