मालबोल्गे
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 में, GitHub उपयोगकर्ता kspalaiologos ने मालबोल्गे Unshackled में एक वर्किंग लिस्प (प्रोग्रामिंग भाषा) इंटरप्रेटर (कंप्यूटिंग) बनाया।[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 का अर्थ 'accumulator' है, जो मेमोरी पर सभी राइट ऑपरेशंस द्वारा लिखे गए मान पर सेट होता है और इनपुट/आउटपुट|मानक I/O के लिए उपयोग किया जाता है। 'सी', कोड पॉइंटर, विशेष है: यह प्रोग्राम गणक है।[12] डी डेटा सूचक है। यह प्रत्येक निर्देश के बाद स्वचालित रूप से बढ़ जाता है, लेकिन यह जिस स्थान को इंगित करता है उसका उपयोग डेटा हेरफेर कमांड के लिए किया जाता है।
सूचक संकेतन
डी मेमोरी एड्रेस को होल्ड कर सकता है; [डी] एड्रेसिंग मोड है#अप्रत्यक्ष रूप से रजिस्टर करें; उस पते पर संग्रहीत मूल्य। [सी] समान है।
मेमोरी
वर्चुअल मशीन में 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.