मालबोल्गे
यह लेख प्रोग्रामिंग भाषा के बारे में है। दांते के इन्फर्नो में नरक के आठवें चक्र के लिए, मेलबोलगे देखें।
File:मालबोल्गे इको प्रोग्राम.पीएनजी | |
Paradigm | गुप्त, अनिवार्य, अदिष्ट, मूल्य-स्तर |
---|---|
द्वारा डिज़ाइन किया गया | बेन ओल्मस्टेड[1] |
Developer | बेन ओल्मस्टेड[1] |
पहली प्रस्तुति | 1998 |
टाइपिंग अनुशासन | अनटाइप |
फ़ाइल नाम एक्सटेंशनएस | .mal, .mb |
Influenced by | |
ब्रेनफक, इंटरकैल (त्रि-इंटरकैल), बेफ़ंगे | |
Influenced | |
है, मालबोल्गे अनशेकल्ड |
मालबोलगे (/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]
निर्देश
मालबोलगे के आठ निर्देश हैं। मालबोलगे ने यह पता लगाता है कि [c] का मान लेकर, उसमें c का मान जोड़कर और शेष को 94 से विभाजित करने पर किस निर्देश को निष्पादित करना है। अंतिम परिणाम दुभाषिया (इंटरप्रेटर) को बताता है कि क्या करना है:
([c] + c) % 94 का मान |
निर्देश का प्रतिनिधित्व | स्पष्टीकरण |
---|---|---|
4 | jmp [d] | मान को [d] से c पर कॉपी करता है। ध्यान दें कि इस निर्देश के निष्पादन के बाद भी c में वृद्धि होगी, इसलिए निष्पादित किया जाने वाला अगला निर्देश [d] + 1 (सापेक्ष 59049) पर होगा। |
5 | out a | a के मान को सूचना आदान-प्रदान के लिए अमेरिकी मानक कोड (एएससीआईआई) वर्ण के रूप में स्क्रीन पर प्रिंट करता है। |
23 | in a | एएससीआईआई कोड के रूप में एक वर्ण को a में इनपुट करता है। न्यूलाइन्स या लाइन फीड्स दोनों कोड 10 हैं। फ़ाइल के अंत की स्थिति कोड 59048 है। |
39 | rotr [d] mov a, [d] |
मान को [d] पर एक त्रिअंकीय अंक से दाईं ओर घुमाता है (0002111112 2000211111 बन जाता है)। परिणाम को [d] और a दोनों में संग्रहीत करता है। |
40 | mov d, [d] | मान को [d] से d पर कॉपी करता है। |
62 | crz [d], a mov a, [d] |
[d] के मूल्य और a के मूल्य के साथ क्रेजी संक्रिया (नीचे देखें) करता है। परिणाम को [d] और a दोनों में संग्रहीत करता है। |
68 | nop | कुछ नहीं करता। |
81 | end | मालबोलगे प्रोग्राम को समाप्त करता है। |
कोई अन्य मान | 68 के समान कुछ नहीं करता है। किसी प्रोग्राम में लोड होने के समय इन अन्य मानों की स्वीकृति नहीं है, लेकिन बाद में स्वीकृति दी जाती है। |
प्रत्येक निर्देश के क्रियान्वित होने के बाद, दोषी निर्देश एन्क्रिप्ट किया जाता है (नीचे देखें) ताकि यह अगली बार वही काम न करे, जब तक कि कोई जंप न लगे। जंप के ठीक बाद, मालबोलगे प्रत्यक्ष रूप से उस निर्देश को एन्क्रिप्ट करेगा जिस पर उसने जंप किया। फिर, c और d दोनों के मानों में एक की वृद्धि की जाती है और अगला निर्देश निष्पादित किया जाता है।
दुर्बल संचालन
दोनों इनपुट के प्रत्येक त्रिअंकीय अंक के लिए, परिणाम का त्रिअंकीय अंक प्राप्त करने के लिए निम्न तालिका का उपयोग करें। उदाहरण के लिए, crz 0001112220, 0120120120 देता है।
सीआरजेड | इनपुट 2 | |||
---|---|---|---|---|
0 | 1 | 2 | ||
इनपुट 1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 2 | |
2 | 2 | 2 | 1 |
कूटलेखन
एक निर्देश के क्रियान्वित होने के बाद, [c] (इसमें कुछ भी जोड़े बिना) का मान मॉड्यूल संक्रिया 94 से परिवर्तित कर दिया जाएगा। फिर, परिणाम निम्नलिखित दो समकक्ष विधियों में से एक के साथ जोड़ा जाता है।
- विधि 1
- नीचे परिणाम प्राप्त करें। इसके नीचे के वर्ण का सूचना विनिमय के लिए अमेरिकी मानक कोड कोड [c] पर संग्रहित करें।
0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 ---------------------------------------------------------------------------------------------- 9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb
- विधि 2
- नीचे परिणाम प्राप्त करें। एन्क्रिप्टेड संस्करण को [c] पर संग्रहित करें।
परिणाम | एन्क्रिप्टेड | परिणाम | एन्क्रिप्टेड | परिणाम | एन्क्रिप्टेड | परिणाम | एन्क्रिप्टेड | परिणाम | एन्क्रिप्टेड |
---|---|---|---|---|---|---|---|---|---|
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]
- मालबोल्गे अस्पष्ट उपेक्षा के अनुसार ट्यूरिंग-पूर्ण भिन्नता है, जो किसी भी लम्बाई के प्रोग्रामों की स्वीकृति देता है। हालांकि, 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.