मालबोल्गे
यह लेख प्रोग्रामिंग भाषा के बारे में है। दांते के इन्फर्नो में नरक के आठवें चक्र के लिए, मेलबोलगे देखें।
Paradigm | Esoteric, imperative, scalar, value-level |
---|---|
द्वारा डिज़ाइन किया गया | Ben Olmstead[1] |
Developer | Ben Olmstead[1] |
पहली प्रस्तुति | 1998 |
टाइपिंग अनुशासन | Untyped |
फ़ाइल नाम एक्सटेंशनएस | .mal, .mb |
Influenced by | |
Brainfuck, INTERCAL (Tri-INTERCAL), Befunge | |
Influenced | |
Dis, Malbolge Unshackled |
मालबोलगे (/mælˈboʊldʒ/) 1998 में बेन ओल्मस्टेड द्वारा आविष्कार की गई एक सार्वजनिक डोमेन गोपनीय प्रोग्रामिंग भाषा है, जिसका नाम डांटे के इन्फर्नो, द मालेबोल में नरक के आठवें चक्र के नाम पर रखा गया है। यह विशेष रूप से प्रति-सहज ज्ञान युक्त 'दुर्बल संचालन', आधार-तीन अंकगणितीय और स्व-परिवर्तनकारी कोड के माध्यम से उपयोग करने के लिए लगभग असंभव होने के लिए डिज़ाइन किया गया था।।[2] यह पहले की चुनौतीपूर्ण गोपनीय भाषाओं (जैसे ब्रेनफक और बेफंज) की कठिनाई पर आधारित है, लेकिन कंप्यूटर विज्ञान और कूटलेखन (एन्क्रिप्शन) के जटिल इतिहास पर खेलते हुए, इस स्वरूप को अधिकतम पर ले जाता है। इस डिजाइन के होते हुए भी उपयोगी मालबोलगे प्रोग्राम लिखना संभव है।
मालबोल्गे में प्रोग्रामिंग
मालबोल्गे के आने पर इसे समझना बहुत कठिन था। पहले मालबोल्गे प्रोग्राम को प्रदर्शित होने में दो साल लग गए। लेखक ने स्वयं कभी भी मलबोलगे प्रोग्राम नहीं लिखा है।[2] हला प्रोग्राम किसी इंसान द्वारा नहीं लिखा गया था; यह एंड्रयू कुक द्वारा डिज़ाइन किए गए और सूची प्रक्रमण में प्रयुक्त किए गए एक बीम जाँच एल्गोरिथम द्वारा उत्पन्न किया गया था।[3]
बाद में, लू शेफ़र ने मालबोलगे का क्रिप्ट विश्लेषण प्रविष्ट किया और इसके इनपुट को इसके आउटपुट में प्रतिलिपि करने के लिए प्रोग्राम प्रदान किया।[4] मूल साइट के काम करना बंद करने के बाद उन्होंने मूल दुभाषिया और विनिर्देश को भी संग्रहित किया, और मालबोल्गे में प्रोग्राम लिखने की एक सामान्य योजना के साथ-साथ इसकी ट्यूरिंग पूर्णता पर कुछ विचार प्रस्तुत किए।[5]
ओल्म्सटेड का मानना था कि मालबोलगे एक रैखिक परिबद्ध स्वचालन है। इस बारे में एक चर्चा है कि क्या कोई मालबोल्गे में उपयुक्त लूप को कार्यान्वित कर सकता है- पहले गैर-गुण वाले को प्रस्तुत किए जाने से पहले कई वर्ष लग गए थे। कंप्यूटर विज्ञान में बीयर की सही 99 बोतलें संदर्भ, जो गैर-साधारण सिरों और स्थितियों से संबंधित है, जिसकी घोषणा सात वर्षों तक नहीं की गई थी; पहला सही 2005 में हिसाशी इजावा द्वारा किया गया था।[6] हिसाशी इजावा एट अल सॉफ्टवेयर सुरक्षा के लिए भ्रम उत्पन्न करने के उद्देश्य से मालबोलगे में प्रोग्रामिंग के लिए एक गाइड का भी प्रस्ताव रखा।[7]
2020 में, गिटहब उपयोगकर्ता केस्पलाईोलोजोस ने मालबोल्गे अनशेकल्ड (बंधनमुक्त) में एक कार्यकारी सूची प्रक्रमण (प्रोग्रामिंग भाषा) इंटरप्रेटर (कंप्यूटिंग) बनाया।[8]
उदाहरण प्रोग्राम
हैलो, विश्व!
यह प्रोग्राम "हैलो, वर्ल्ड" प्रदर्शित करता है।[9]
(=<`#9]~6ZY327Uv4-QsqpMn&+Ij"'E%e{Ab~w=_:]Kw%o44Uqp0/Q?xNvL:`H%c#DD2^WV>gY;dts76qKJImZkj
echo
प्रोग्राम
यह प्रोग्राम एक उपयोगकर्ता से एक स्ट्रिंग पढ़ता है और उस स्ट्रिंग को यूनिक्स echo
के समान उस स्ट्रिंग को प्रिंट करता है।[10]
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. ~P< <:(8& 66#"!~}|{zyxwvu gJ%
डिजाइन
मालबोल्गे एक त्रिगुट अंक प्रणाली आभासी मशीन, मालबोल्गे दुभाषिया (कंप्यूटिंग) के लिए मशीनी भाषा है।
मानक दुभाषिया और आधिकारिक विनिर्देश पूरी तरह समरूप नहीं हैं।[11] एक अंतर यह है कि कंपाइलर 33–126 सीमा के बाहर डेटा के साथ कार्यान्वयन को रोक देता है। हालांकि प्रारंभ में इसे संकलक में एक बग (त्रुटि) माना गया था, बेन ओल्म्सटेड ने कहा कि इसका उद्देश्य था और वास्तव में "विनिर्देश में एक बग" था।[2]
रजिस्टर
मालबोल्गे में तीन प्रोसेसर रजिस्टर a, c, और d हैं । जब कोई प्रोग्राम प्रारंभ होता है, तो तीनों रजिस्टरों का मान शून्य होता है।
a का अर्थ 'एक्युमुलेटर' (संचायक) है, जो मेमोरी पर सभी लिखित संचालन द्वारा लिखे गए मूल्य पर व्यवस्थित और मानक इनपुट/आउटपुट के लिए उपयोग किया जाता है। 'c', कोड पॉइंटर, विशेष है: यह वर्तमान निर्देश की ओर संकेत करता है।[12] d डेटा पॉइंटर है। यह प्रत्येक निर्देश के बाद स्वचालित रूप से बढ़ जाता है, लेकिन यह जिस स्थान को इंगित करता है उसका उपयोग डेटा कुशलतापूर्वक प्रयोग कमांड के लिए किया जाता है।
पॉइन्टर संकेतन
d एक मेमोरी एड्रैस रख सकता है; [d] अप्रत्यक्ष रूप से रजिस्टर है; उस एड्रैस पर संग्रहीत मान [c] समान है।
मेमोरी
वर्चुअल मशीन में 59,049 (310) रैंडम एक्सेस मेमोरी लोकेशन, जिनमें से प्रत्येक में दस-ट्रिट त्रिगुट अंक प्रणाली हो सकती है। प्रत्येक मेमोरी स्थान का एड्रैस 0 से 59048 तक होता है और 0 से 59048 तक का मान रख सकता है। इस सीमा से आगे बढ़ने पर वापस शून्य हो जाता है।
भाषा डेटा और निर्देशों दोनों के लिए एक ही मेमोरी स्थान का उपयोग करती है। यह x86 संरचना जैसे हार्डवेयर के काम करने के तरीके से प्रभावित था।[2]
मालबोल्गे प्रोग्राम प्रारंभ होने से पहले, मेमोरी का पहला भाग प्रोग्राम से संग्रहित हो जाता है। प्रोग्राम में सभी रिक्त स्थान को उपेक्षित किया जाता है और प्रोग्रामिंग को और अधिक कठिन बनाने के लिए, प्रोग्राम में में सब कुछ नीचे दिए गए निर्देशों से बाहर होना चाहिए।
पिछले दो एड्रैस ('[m] = crz [m - 2], [m - 1]') पर दुर्बल संचालन (नीचे देखें) का उपयोग करके शेष मेमोरी संग्रहित कर दी गई है। इस तरह से भंडारण मेमोरी प्रत्येक बारह एड्रैस को पुनरावृत करेगी (व्यक्तिगत त्रिगुट अंक प्रत्येक तीन या चार एड्रैस को पुनरावृत करेगी, इसलिए त्रिगुट अंकों का एक समूह प्रत्येक बारह को पुनरावृत की प्रत्याभूति देता है)।
2007 में, अर्जन जोहान्सन ने मालबोल्गे अनशेकल्ड बनाया, माल्बोल्गे का एक संस्करण जिसमें व्यवस्थित मेमोरी सीमा नहीं है। जितना संभव हो मालबोल्गे की तत्परता में रखते हुए एक ट्यूरिंग-पूर्ण भाषा बनाने की उपेक्षा थी। कोई अन्य नियम नहीं परिवर्तित कर दिए गए हैं, और सभी मालबोल्गे प्रोग्राम जो मेमोरी सीमा तक नहीं पहुँचते हैं वे पूरी तरह कार्यात्मक हैं।[13]
निर्देश
मालबोलगे के पास आठ opcode हैं। मालबोल्गे यह पता लगाता है कि [c] का मान लेकर, उसमें c का मान जोड़कर और शेष को 94 से विभाजित करने पर किस निर्देश को निष्पादित करना है। अंतिम परिणाम दुभाषिया को बताता है कि क्या करना है:
([c] + c) % 94 का मान |
निर्देश का प्रतिनिधित्व | स्पष्टीकरण |
---|---|---|
4 | jmp [d] | Copies the value at [d] to c. Note that c will still be incremented after execution of this instruction, so the next instruction to be executed will be the one at [d] + 1 (modulo 59049). |
5 | out a | Prints the value of a, as an ASCII character, to the screen. |
23 | in a | Inputs a character, as an ASCII code, into a. Newlines or line feeds are both code 10. An end-of-file condition is code 59048. |
39 | rotr [d] mov a, [d] |
Rotates the value at [d] by one ternary digit to the right (0002111112 becomes 2000211111). Stores the result both at [d] and in a. |
40 | mov d, [d] | Copies the value at [d] to d. |
62 | crz [d], a mov a, [d] |
Does the crazy operation (see below) with the value at [d] and the value of a. Stores the result both at [d] and in a. |
68 | nop | कुछ नहीं करता। |
81 | end | मालबोलगे प्रोग्राम को समाप्त करता है। |
कोई अन्य मान | 68 के समान कुछ नहीं करता है। किसी प्रोग्राम में लोड होने के समय इन अन्य मानों की स्वीकृति नहीं है, लेकिन बाद में स्वीकृति दी जाती है। |
प्रत्येक निर्देश के क्रियान्वित होने के बाद, दोषी निर्देश एन्क्रिप्ट किया जाता है (नीचे देखें) ताकि यह अगली बार वही काम न करे, जब तक कि कोई छलांग न लगे। छलांग लगाने के ठीक बाद, मालबोलगे सीधे उस निर्देश को एन्क्रिप्ट करेगा जिस पर उसने छलांग लगाई थी। फिर, c और d दोनों के मानों में एक की वृद्धि की जाती है और अगला निर्देश निष्पादित किया जाता है।
दुर्बल संचालन
दोनों इनपुट के प्रत्येक त्रिअंकीय अंक के लिए, परिणाम का त्रिअंकीय अंक प्राप्त करने के लिए निम्न तालिका का उपयोग करें। उदाहरण के लिए, crz 0001112220, 0120120120 1001022211 देता है।
crz | Input 2 | |||
---|---|---|---|---|
0 | 1 | 2 | ||
Input 1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 2 | |
2 | 2 | 2 | 1 |
गोपनीयलेख
एक निर्देश के क्रियान्वित होने के बाद, [c] (इसमें कुछ भी जोड़े बिना) का मान मॉड्यूल संचालन 94 से बदल दिया जाएगा। फिर, परिणाम निम्नलिखित दो समकक्ष प्रतिस्थापन सिफर में से एक के साथ कूटबद्ध किया जाता है।
- विधि 1
- नीचे परिणाम प्राप्त करें। इसके नीचे के कैरेक्टर का ASCII कोड [c] पर स्टोर करें।
<वाक्यविन्यास लैंग = पाठ>
000000000011111111112222222222333333333344444444445555555556666666666777777777788888888889999 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 --------------------------------------------------- -------------------------------------------- 9मी<.TVac`uY*MK'X~xDl}REokN:#?G i@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8| jsb
</वाक्यविन्यास हाइलाइट>
- विधि 2
- नीचे परिणाम प्राप्त करें। एन्क्रिप्टेड वर्जन को [c] पर स्टोर करें।
Result | Encrypted | Result | Encrypted | Result | Encrypted | Result | Encrypted | Result | Encrypted |
---|---|---|---|---|---|---|---|---|---|
0 | 57 | 19 | 108 | 38 | 113 | 57 | 91 | 76 | 79 |
1 | 109 | 20 | 125 | 39 | 116 | 58 | 37 | 77 | 65 |
2 | 60 | 21 | 82 | 40 | 121 | 59 | 92 | 78 | 49 |
3 | 46 | 22 | 69 | 41 | 102 | 60 | 51 | 79 | 67 |
4 | 84 | 23 | 111 | 42 | 114 | 61 | 100 | 80 | 66 |
5 | 86 | 24 | 107 | 43 | 36 | 62 | 76 | 81 | 54 |
6 | 97 | 25 | 78 | 44 | 40 | 63 | 43 | 82 | 118 |
7 | 99 | 26 | 58 | 45 | 119 | 64 | 81 | 83 | 94 |
8 | 96 | 27 | 35 | 46 | 101 | 65 | 59 | 84 | 61 |
9 | 117 | 28 | 63 | 47 | 52 | 66 | 62 | 85 | 73 |
10 | 89 | 29 | 71 | 48 | 123 | 67 | 85 | 86 | 95 |
11 | 42 | 30 | 34 | 49 | 87 | 68 | 33 | 87 | 48 |
12 | 77 | 31 | 105 | 50 | 80 | 69 | 112 | 88 | 47 |
13 | 75 | 32 | 64 | 51 | 41 | 70 | 74 | 89 | 56 |
14 | 39 | 33 | 53 | 52 | 72 | 71 | 83 | 90 | 124 |
15 | 88 | 34 | 122 | 53 | 45 | 72 | 55 | 91 | 106 |
16 | 126 | 35 | 93 | 54 | 90 | 73 | 50 | 92 | 115 |
17 | 120 | 36 | 38 | 55 | 110 | 74 | 70 | 93 | 98 |
18 | 68 | 37 | 103 | 56 | 44 | 75 | 104 |
लू शेफ़र के मालबोल्गे के क्रिप्ट विश्लेषण में क्रमचय में छह अलग-अलग चक्रों का उल्लेख है। वे यहाँ सूचीबद्ध हैं:
- 33 ⇒ 53 ⇒ 45 ⇒ 119 ⇒ 78 ⇒ 49 ⇒ 49 ⇒ 87 ⇒ 48 ⇒ 123 ⇒ 71 ⇒ 83 ⇒ 94 ⇒ 57 ⇒ 91 ⇒ 91 ⇒ 106 ⇒ 77 ⇒ 65 ⇒ 59 ⇒ 59 ⇒ 92 ⇒ 115 ⇒ 82 ⇒ 82 ⇒ 118 ⇒ 118 ⇒ 107 ⇒ ⇒ 89 ⇒ 56 ⇒ 44 ⇒ 44 ⇒ 40 ⇒ 121 ⇒ 35 ⇒ 93 ⇒ 98 ⇒ 98 ⇒ 84 ⇒ 61 ⇒ 100 ⇒ 97 ⇒ 46 ⇒ 101 ⇒ 101 ⇒ 99 ⇒ 86 ⇒ 95 ⇒ 109 ⇒ 88 ⇒ 88 ⇒ 88 ⇒ 47 ⇒ ⇒ 64 ⇒ 81 ⇒ 54 ⇒ 90 ⇒ 124 ⇒ 34 ⇒ 122 ⇒ 63 ⇒ 43 ⇒ 36 ⇒ 38 ⇒ 113 ⇒ 108 ⇒ 39 ⇒ 116 ⇒ 69 ⇒ 3 ⇒ 112 ⇒
- 37 ⇒ 103 ⇒ 117 ⇒ 111 ⇒ 120 ⇒ 58 ⇒ 37 ...
- 41 ⇒ 102 ⇒ 96 ⇒ 60 ⇒ 51 ⇒ 41 ...
- 42 ⇒ 114 ⇒ 125 ⇒ 105 ⇒ 42 ...
- 50 ⇒ 80 ⇒ 66 ⇒ 62 ⇒ 76 ⇒ 79 ⇒ 67 ⇒ 85 ⇒ 73 ⇒ 50 ...
- 70 ⇒ 74 ⇒ 70 ...
इन चक्रों का उपयोग लूप बनाने के लिए किया जा सकता है जो प्रत्येक बार अलग-अलग काम करते हैं और जो अंततः दोहराए जाते हैं। लो शेफ़र ने इस विचार का उपयोग एक मैलबॉल्ज प्रोग्राम बनाने के लिए किया (नीचे दिए गए उनके क्रिप्ट विश्लेषण में सम्मिलित) जो उपयोगकर्ता इनपुट को दोहराता है।
वेरिएंट
मालबोल्गे ट्यूरिंग-पूर्ण भाषा नहीं है | ट्यूरिंग-पूर्ण, इसकी मेमोरी सीमा के कारण। हालाँकि, इसमें अन्यथा अनुक्रमिक कार्यान्वयन, पुनरावृत्ति और सशर्त- कार्यान्वयन है। मालबोलगे के ट्यूरिंग-पूर्ण संस्करण बनाने के लिए कई प्रयास किए गए हैं:
- मालबोल्गे20 20 ट्रिट्स के विस्तारित शब्द-आकार के साथ मालबोल्गे का एक संस्करण है, जिससे एक व्यक्ति को ~3.4 गीगाबाइट तक के आकार के साथ एक प्रोग्राम लिखने की स्वीकृति मिलती है।[14]
- मालबोल्गे-T, मालबोल्गे का एक सैद्धांतिक संस्करण है जो अंत तक पहुँचने पर इनपुट/आउटपुट स्ट्रीम को रीसेट करता है, जिससे असीमित प्रोग्रामों की स्वीकृति मिलती है। मालबोल्गे-T मालबोल्गे के साथ पश्चगामी अनुकूलता होगी।[4]
- मालबोल्गे Unshackled उम्मीद के मुताबिक ट्यूरिंग-पूर्ण भिन्नता है, जो किसी भी लम्बाई के प्रोग्रामों की स्वीकृति देता है। हालांकि, 257 से ऊपर के मूल्यों के लिए स्वीकृति देने के लिए कमांड विविधताओं के कारण, मालबोलगे अनशेकल्ड में मान्य मालबोल्गे प्रोग्राम सही ढंग से नहीं चलेंगे।[15]
लोकप्रिय संस्कृति
टेलीविजन श्रृंखला एलीमेंट्री (टीवी श्रृंखला) में, एपिसोड द लेविथान (सीजन 1, एपिसोड 10) के समय, कॉफी ऑर्डर पर लिखे गए एक सुराग को मालबोलगे में लिखा गया बताया गया है। यह ऊपर दिखाए गए अधिक वर्बोज़ हैलो वर्ल्ड उदाहरण का एक छोटा संशोधन प्रतीत होता है।[2][16] लीवरेज: रिडेम्पशन एपिसोड द गोल्फ जॉब (सीजन 1, एपिसोड 12) में, एक एसएमएस ऑटो-रिप्लाई पढ़ता है कि ब्रीना गुरुवार से रविवार तक अनुपलब्ध है या जब तक वह मालबोल्गे कोड में महारत हासिल नहीं कर लेती।
द बिलियन्स (टीवी सीरीज़) एपिसोड द लिमिटलेस शिट (सीज़न 5, एपिसोड 7) में, एक्स कैपिटल के एक प्रोग्रामर विश्लेषक बताते हैं कि वह ... मालबोलगे के साथ इधर-उधर घूमता था, लेकिन सिर्फ मनोरंजन के लिए।
यह भी देखें
- इंटरकैल
- भ्रमित कोड
संदर्भ
- ↑ 1.0 1.1 "Malbolge - Esolang". Retrieved 2022-08-27.
- ↑ 2.0 2.1 2.2 2.3 2.4 2.5 Temkin, Daniel (2014-11-03). "Interview with Ben Olmstead". esoteric.codes. Retrieved 2021-01-07.
- ↑ Cooke, Andrew. "malbolge: hello world" (in English). Archived from the original on 2019-12-06. Retrieved 2021-01-08.
- ↑ 4.0 4.1 Scheffer, Lou (2015-04-17). "Introduction to Malbolge". Retrieved 2017-06-09.
- ↑ Mykhailova, Mariya (2012-05-11). "Malbolge - Programming language". Progopedia. Retrieved 2017-06-09.
- ↑ "Language Malbolge". 99 Bottles of Beer. 2005-12-29. Archived from the original on 2020-05-14. Retrieved 2020-11-19.
- ↑ 7.0 7.1 IIZAWA, Hisashi. "Programming Method in Obfuscated Language Malbolge" (PDF) (in Japanese). Nagoya University. Retrieved 2017-06-09.
{{cite web}}
: CS1 maint: unrecognized language (link) - ↑ Palaiologos (2021-03-04), kspalaiologos/malbolge-lisp, retrieved 2021-03-23
- ↑ Palaiologos (2021-03-04), kspalaiologos/hello.mb, retrieved 2021-03-23
- ↑ Lutter, Matthias. "Malbolge cat". lutter.cc. Retrieved 2022-08-28.
{{cite web}}
: CS1 maint: url-status (link) - ↑ Green, Austin (2000-12-01). "Malbolge". Louisiana Tech University. Retrieved 2017-06-09.
- ↑ Olmstead, Ben (1998). "Malbolge Specification". www.lscheffer.com. Retrieved 2017-06-09.
- ↑ Johansen, Ørjan (2013-10-25). "An interpreter for the Malbolge Unshackled dialect" (Haskell). oerjan.nvg.org. Retrieved 2017-06-09.
- ↑ "Malbolge20 - Esolang". esolangs.org. Retrieved 2022-12-12.
- ↑ "Malbolge Unshackled". esolangs.org. 2017-04-14. Retrieved 2017-06-09.
- ↑ "Leviathan". Elementary. Season 1. Episode 10. Manhattan. 2012-12-14. CBS.