मालबोल्गे: Difference between revisions
From Vigyanwiki
No edit summary |
No edit summary |
||
| (4 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
{{Short description|1998 esoteric programming language}} | {{Short description|1998 esoteric programming language}} | ||
''यह लेख प्रोग्रामिंग भाषा के बारे में है। दांते के इन्फर्नो में नरक के आठवें चक्र के लिए, मेलबोलगे देखें।''{{Infobox programming language | |||
| title = मालबोलगे | |||
{{Infobox programming language | | screenshot = मालबोल्गे इको प्रोग्राम.पीएनजी | ||
| title = | | screenshot caption = मालबोलगे में एक प्रतिध्वनि कार्यक्रम | ||
| screenshot = | | paradigm = गुप्त, अनिवार्य, अदिष्ट, मूल्य-स्तर | ||
| screenshot caption = | | designer = बेन ओल्मस्टेड<ref name=esolangs>{{Cite web | ||
| paradigm = | |||
| designer = | |||
|url=https://esolangs.org/wiki/Malbolge | |url=https://esolangs.org/wiki/Malbolge | ||
|title=Malbolge - Esolang | |title=Malbolge - Esolang | ||
|access-date=2022-08-27}}</ref> | |access-date=2022-08-27}}</ref> | ||
| developer = | | developer = बेन ओल्मस्टेड<ref name=esolangs/> | ||
| discontinued = | | discontinued = हाँ | ||
| released = 1998 | | released = 1998 | ||
| influenced by = [[ | | influenced by = [[ब्रेनफक]], [[इंटरकैल]] (त्रि-इंटरकैल), [[बेफ़ंगे]] | ||
| influenced = | | influenced = है, मालबोल्गे अनशेकल्ड | ||
| File extensions = .mal, .mb | | File extensions = .mal, .mb | ||
| typing = | | typing = अनटाइप | ||
}} | }} | ||
मालबोलगे ({{IPAc-en|m|æ|l|ˈ|b|oʊ|l|dʒ}}) 1998 में बेन ओल्मस्टेड द्वारा आविष्कार की गई एक सार्वजनिक डोमेन [[गूढ़ प्रोग्रामिंग भाषा]] है, जिसका नाम | '''''मालबोलगे ({{IPAc-en|m|æ|l|ˈ|b|oʊ|l|dʒ}})''''' 1998 में बेन ओल्मस्टेड द्वारा आविष्कार की गई एक सार्वजनिक डोमेन [[गूढ़ प्रोग्रामिंग भाषा|गोपनीय प्रोग्रामिंग भाषा]] है, जिसका नाम डांटे के इन्फर्नो, द मालेबोल में नरक के आठवें चक्र के नाम पर रखा गया है। यह विशेष रूप से प्रति-सहज ज्ञान युक्त 'दुर्बल संचालन', आधार-तीन अंकगणितीय और स्व-परिवर्तनकारी कोड के माध्यम से उपयोग करने के लिए लगभग असंभव होने के लिए डिज़ाइन किया गया था।।<ref name=":0" /> यह पहले की चुनौतीपूर्ण गोपनीय भाषाओं (जैसे [[ब्रेनफक]] और बेफंज) की कठिनाई पर आधारित है, लेकिन कंप्यूटर विज्ञान और [[कूटलेखन]] (एन्क्रिप्शन) के जटिल इतिहास पर खेलते हुए, इस स्वरूप को अधिकतम पर ले जाता है। इस डिजाइन के होते हुए भी उपयोगी मालबोलगे प्रोग्राम लिखना संभव है। | ||
== मालबोल्गे में प्रोग्रामिंग == | == मालबोल्गे में प्रोग्रामिंग == | ||
मालबोल्गे के आने पर इसे समझना बहुत | मालबोल्गे के आने पर इसे समझना बहुत कठिन था। पहले मालबोल्गे प्रोग्राम को प्रदर्शित होने में दो साल लग गए। लेखक ने स्वयं कभी भी मलबोलगे प्रोग्राम नहीं लिखा है।<ref name=":0" /> हला प्रोग्राम किसी इंसान द्वारा नहीं लिखा गया था; यह एंड्रयू कुक द्वारा डिज़ाइन किए गए और सूची प्रक्रमण में प्रयुक्त किए गए एक बीम जाँच एल्गोरिथम द्वारा उत्पन्न किया गया था।<ref>{{cite web | ||
|url=https://www.acooke.org/malbolge.html | |url=https://www.acooke.org/malbolge.html | ||
|url-access= | |url-access= | ||
| Line 34: | Line 32: | ||
|archive-date=2019-12-06 | |archive-date=2019-12-06 | ||
}}</ref> | }}</ref> | ||
बाद में, लू शेफ़र ने मालबोलगे का | |||
बाद में, लू शेफ़र ने मालबोलगे का [[क्रिप्ट विश्लेषण]] प्रविष्ट किया और इसके इनपुट को इसके आउटपुट में प्रतिलिपि करने के लिए प्रोग्राम प्रदान किया।<ref name="lscheffer" /> मूल साइट के काम करना बंद करने के बाद उन्होंने मूल दुभाषिया और विनिर्देश को भी संग्रहित किया, और मालबोल्गे में प्रोग्राम लिखने की एक सामान्य योजना के साथ-साथ इसकी [[ट्यूरिंग पूर्णता]] पर कुछ विचार प्रस्तुत किए।<ref>{{Cite web | |||
| title = Malbolge - Programming language | | title = Malbolge - Programming language | ||
| url = http://progopedia.com/language/malbolge/ | | url = http://progopedia.com/language/malbolge/ | ||
| Line 42: | Line 41: | ||
| publisher = Progopedia | | publisher = Progopedia | ||
| accessdate = 2017-06-09}}</ref> | | accessdate = 2017-06-09}}</ref> | ||
ओल्म्सटेड का मानना था कि मालबोलगे एक रैखिक परिबद्ध | |||
ओल्म्सटेड का मानना था कि मालबोलगे एक रैखिक परिबद्ध स्वचालन है। इस बारे में एक चर्चा है कि क्या कोई मालबोल्गे में उपयुक्त लूप को कार्यान्वित कर सकता है- पहले गैर-गुण वाले को प्रस्तुत किए जाने से पहले कई वर्ष लग गए थे। कंप्यूटर विज्ञान में बीयर की सही 99 बोतलें संदर्भ, जो गैर-साधारण सिरों और स्थितियों से संबंधित है, जिसकी घोषणा सात वर्षों तक नहीं की गई थी; पहला सही 2005 में हिसाशी इजावा द्वारा किया गया था।<ref>{{cite web | |||
| url=http://www.99-bottles-of-beer.net/language-malbolge-995.html | | url=http://www.99-bottles-of-beer.net/language-malbolge-995.html | ||
| title=Language Malbolge | | title=Language Malbolge | ||
| Line 50: | Line 50: | ||
| archive-date=2020-05-14 | | archive-date=2020-05-14 | ||
| url-status=dead | | url-status=dead | ||
| accessdate=2020-11-19}}</ref> हिसाशी इजावा एट | | accessdate=2020-11-19}}</ref> हिसाशी इजावा एट अल सॉफ्टवेयर सुरक्षा के लिए भ्रम उत्पन्न करने के उद्देश्य से मालबोलगे में प्रोग्रामिंग के लिए एक गाइड का भी प्रस्ताव रखा।<ref name=":1" /> | ||
2020 में, [[GitHub|गिटहब]] उपयोगकर्ता केस्पलाईोलोजोस ने मालबोल्गे अनशेकल्ड (बंधनमुक्त) में एक कार्यकारी [[लिस्प (प्रोग्रामिंग भाषा)|सूची प्रक्रमण (प्रोग्रामिंग भाषा)]] इंटरप्रेटर (कंप्यूटिंग) बनाया।<ref>{{Citation|last=Palaiologos|title=kspalaiologos/malbolge-lisp|date=2021-03-04|url=https://github.com/kspalaiologos/malbolge-lisp|access-date=2021-03-23}}</ref> | |||
| Line 58: | Line 59: | ||
=== हैलो, विश्व! === | === हैलो, विश्व! === | ||
यह प्रोग्राम हैलो वर्ल्ड | यह प्रोग्राम "हैलो, वर्ल्ड" प्रदर्शित करता है।<ref>{{Citation|last=Palaiologos|title=kspalaiologos/hello.mb|date=2021-03-04|url=https://gist.github.com/kspalaiologos/a1fe6913aaff8edea515b4af385368fe|access-date=2021-03-23}}</ref> | ||
(=<`#9]~6ZY327Uv4-QsqpMn&+Ij"'E%e{Ab~w=_:]Kw%o44Uqp0/Q?xNvL:`H%c#DD2^WV>gY;dts76qKJImZkj | (=<`#9]~6ZY327Uv4-QsqpMn&+Ij"'E%e{Ab~w=_:]Kw%o44Uqp0/Q?xNvL:`H%c#DD2^WV>gY;dts76qKJImZkj | ||
===<code>echo</code> प्रोग्राम === | ===<code>echo</code> प्रोग्राम === | ||
यह प्रोग्राम एक उपयोगकर्ता से एक स्ट्रिंग पढ़ता है और उस स्ट्रिंग को यूनिक्स | यह प्रोग्राम एक उपयोगकर्ता से एक स्ट्रिंग पढ़ता है और उस स्ट्रिंग को यूनिक्स <code>[[echo (command)|echo]]</code>के समान उस स्ट्रिंग को प्रिंट करता है।<ref>{{Cite web |last=Lutter |first=Matthias |title=Malbolge cat |url=https://lutter.cc/malbolge/cat.html |url-status=live |access-date=2022-08-28 |website=lutter.cc}}</ref> | ||
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. | (=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. | ||
~P< | ~P< | ||
| Line 70: | Line 71: | ||
== डिजाइन == | == डिजाइन == | ||
मालबोल्गे एक | मालबोल्गे एक त्रिगुट अंक प्रणाली [[आभासी मशीन]], मालबोल्गे दुभाषिया (कंप्यूटिंग) के लिए मशीनी भाषा है। | ||
मानक दुभाषिया और आधिकारिक विनिर्देश पूरी तरह | मानक दुभाषिया और आधिकारिक विनिर्देश पूरी तरह समरूप नहीं हैं।<ref>{{Cite web | ||
| title = Malbolge | | title = Malbolge | ||
| url = http://www2.latech.edu/~acm/helloworld/malbolge.html | | url = http://www2.latech.edu/~acm/helloworld/malbolge.html | ||
| Line 79: | Line 80: | ||
| date = 2000-12-01 | | date = 2000-12-01 | ||
| website = [[Louisiana Tech University]] | | website = [[Louisiana Tech University]] | ||
| accessdate = 2017-06-09}}</ref> एक अंतर यह है कि कंपाइलर 33–126 | | accessdate = 2017-06-09}}</ref> एक अंतर यह है कि कंपाइलर 33–126 सीमा के बाहर डेटा के साथ कार्यान्वयन को रोक देता है। हालांकि प्रारंभ में इसे संकलक में एक बग (त्रुटि) माना गया था, बेन ओल्म्सटेड ने कहा कि इसका उद्देश्य था और वास्तव में "विनिर्देश में एक बग" था।<ref name=":0" /> | ||
=== रजिस्टर === | === रजिस्टर === | ||
मालबोल्गे में तीन [[प्रोसेसर रजिस्टर]] | मालबोल्गे में तीन [[प्रोसेसर रजिस्टर]] ''a'', ''c'', और ''d हैं'' । जब कोई प्रोग्राम प्रारंभ होता है, तो तीनों रजिस्टरों का मान शून्य होता है। | ||
''a'' का अर्थ ' | '''''a''''' का अर्थ 'एक्युमुलेटर' (संचायक) है, जो मेमोरी पर सभी लिखित संचालन द्वारा लिखे गए मूल्य पर व्यवस्थित और मानक इनपुट/आउटपुट के लिए उपयोग किया जाता है। ''''c'''<nowiki/>', कोड पॉइंटर, विशेष है: यह वर्तमान निर्देश की ओर संकेत करता है।<ref>{{Cite web | ||
| title = Malbolge Specification | | title = Malbolge Specification | ||
| url = http://www.lscheffer.com/malbolge_spec.html | | url = http://www.lscheffer.com/malbolge_spec.html | ||
| Line 93: | Line 94: | ||
| date = 1998 | | date = 1998 | ||
| website = www.lscheffer.com | | website = www.lscheffer.com | ||
| accessdate = 2017-06-09}}</ref> '' | | accessdate = 2017-06-09}}</ref> '''d''' डेटा पॉइंटर है। यह प्रत्येक निर्देश के बाद स्वचालित रूप से बढ़ जाता है, लेकिन यह जिस स्थान को इंगित करता है उसका उपयोग डेटा कुशलतापूर्वक प्रयोग कमांड के लिए किया जाता है। | ||
=== | === पॉइन्टर संकेतन === | ||
'' | '''d''' एक मेमोरी एड्रैस रख सकता है; '''[d]''' अप्रत्यक्ष रूप से रजिस्टर है; उस एड्रैस पर संग्रहीत मान '''[c]''' समान है। | ||
=== मेमोरी === | === मेमोरी === | ||
वर्चुअल मशीन में 59,049 (3<sup>10</sup>) [[रैंडम एक्सेस मेमोरी]] लोकेशन, जिनमें से प्रत्येक में दस-ट्रिट | वर्चुअल मशीन में 59,049 (3<sup>10</sup>) [[रैंडम एक्सेस मेमोरी]] लोकेशन, जिनमें से प्रत्येक में दस-ट्रिट त्रिगुट अंक प्रणाली हो सकती है। प्रत्येक मेमोरी स्थान का एड्रैस 0 से 59048 तक होता है और 0 से 59048 तक का मान रख सकता है। इस सीमा से आगे बढ़ने पर वापस शून्य हो जाता है। | ||
भाषा | भाषा डेटा और निर्देशों दोनों के लिए एक ही मेमोरी स्थान का उपयोग करती है। यह x86 संरचना जैसे हार्डवेयर के काम करने के तरीके से प्रभावित था।<ref name=":0" /> | ||
मालबोल्गे प्रोग्राम | मालबोल्गे प्रोग्राम प्रारंभ होने से पहले, मेमोरी का पहला भाग प्रोग्राम से संग्रहित हो जाता है। प्रोग्राम में सभी रिक्त स्थान को उपेक्षित किया जाता है और प्रोग्रामिंग को और अधिक कठिन बनाने के लिए, प्रोग्राम में में सब कुछ नीचे दिए गए निर्देशों से बाहर होना चाहिए। | ||
पिछले दो | पिछले दो एड्रैस ('[m] = crz [m - 2], [m - 1]') पर दुर्बल संचालन (नीचे देखें) का उपयोग करके शेष मेमोरी संग्रहित कर दी गई है। इस तरह से भंडारण मेमोरी प्रत्येक बारह एड्रैस को पुनरावृत करेगी (व्यक्तिगत त्रिगुट अंक प्रत्येक तीन या चार एड्रैस को पुनरावृत करेगी, इसलिए त्रिगुट अंकों का एक समूह प्रत्येक बारह को पुनरावृत की प्रत्याभूति देता है)। | ||
2007 में, अर्जन जोहान्सन ने मालबोल्गे | 2007 में, अर्जन जोहान्सन ने मालबोल्गे अस्पष्ट बनाया, माल्बोल्गे का एक संस्करण जिसमें व्यवस्थित मेमोरी सीमा नहीं है। जितना संभव हो मालबोल्गे की तत्परता में रखते हुए एक ट्यूरिंग-पूर्ण भाषा बनाने की उपेक्षा थी। कोई अन्य नियम नहीं परिवर्तित कर दिए गए हैं, और सभी मालबोल्गे प्रोग्राम जो मेमोरी सीमा तक नहीं पहुँचते हैं वे पूरी तरह कार्यात्मक हैं।<ref>{{Cite web | ||
| title = An interpreter for the Malbolge Unshackled dialect | | title = An interpreter for the Malbolge Unshackled dialect | ||
| url = http://oerjan.nvg.org/esoteric/Unshackled.hs | | url = http://oerjan.nvg.org/esoteric/Unshackled.hs | ||
| Line 119: | Line 120: | ||
=== निर्देश === | === निर्देश === | ||
मालबोलगे के | मालबोलगे के आठ निर्देश हैं। मालबोलगे ने यह पता लगाता है कि '''[c]''' का मान लेकर, उसमें '''c''' का मान जोड़कर और शेष को 94 से विभाजित करने पर किस निर्देश को निष्पादित करना है। अंतिम परिणाम दुभाषिया (इंटरप्रेटर) को बताता है कि क्या करना है: | ||
{| style="margin:auto;" class="wikitable" | {| style="margin:auto;" class="wikitable" | ||
| Line 128: | Line 129: | ||
|- | |- | ||
! 4 | ! 4 | ||
| {{mono|jmp [d]}} || style="text-align:left;"| | | {{mono|jmp [d]}} || style="text-align:left;"| मान को '''[d]''' से '''c''' पर कॉपी करता है। ध्यान दें कि इस निर्देश के निष्पादन के बाद भी '''c''' में वृद्धि होगी, इसलिए निष्पादित किया जाने वाला अगला निर्देश '''[d] + 1 (सापेक्ष 59049)''' पर होगा। | ||
|- | |- | ||
! 5 | ! 5 | ||
| {{mono|out a}} || style="text-align:left;"| | | {{mono|out a}} || style="text-align:left;"| '''a''' के मान को सूचना आदान-प्रदान के लिए अमेरिकी मानक कोड (एएससीआईआई) वर्ण के रूप में स्क्रीन पर प्रिंट करता है। | ||
|- | |- | ||
! 23 | ! 23 | ||
| {{mono|in a}} || style="text-align:left;"| | | {{mono|in a}} || style="text-align:left;"| एएससीआईआई कोड के रूप में एक वर्ण को '''a''' में इनपुट करता है। न्यूलाइन्स या लाइन फीड्स दोनों कोड 10 हैं। फ़ाइल के अंत की स्थिति कोड '''59048''' है। | ||
|- | |- | ||
! 39 | ! 39 | ||
| {{mono|rotr [d]<br />mov a, [d]}} || style="text-align:left;"| | | {{mono|rotr [d]<br />mov a, [d]}} || style="text-align:left;"| मान को '''[d]''' पर एक त्रिअंकीय अंक से दाईं ओर घुमाता है (000211111'''2''' '''2'''000211111 बन जाता है)। परिणाम को '''[d]''' और '''a''' दोनों में संग्रहीत करता है। | ||
|- | |- | ||
! 40 | ! 40 | ||
| {{mono|mov d, [d]}} || style="text-align:left;"| | | {{mono|mov d, [d]}} || style="text-align:left;"| मान को '''[d]''' से '''d''' पर कॉपी करता है। | ||
|- | |- | ||
! 62 | ! 62 | ||
| {{mono|crz [d], a<br />mov a, [d]}} || style="text-align:left;"| | | {{mono|crz [d], a<br />mov a, [d]}} || style="text-align:left;"| '''[d]''' के मूल्य और '''a''' के मूल्य के साथ क्रेजी संक्रिया (नीचे देखें) करता है। परिणाम को '''[d]''' और '''a''' दोनों में संग्रहीत करता है। | ||
|- | |- | ||
! 68 | ! 68 | ||
| Line 154: | Line 155: | ||
| colspan="2" | ''68 के समान कुछ नहीं करता है। किसी प्रोग्राम में लोड होने के समय इन अन्य मानों की स्वीकृति नहीं है, लेकिन बाद में स्वीकृति दी जाती है।'' | | colspan="2" | ''68 के समान कुछ नहीं करता है। किसी प्रोग्राम में लोड होने के समय इन अन्य मानों की स्वीकृति नहीं है, लेकिन बाद में स्वीकृति दी जाती है।'' | ||
|} | |} | ||
प्रत्येक निर्देश के क्रियान्वित होने के बाद, दोषी निर्देश एन्क्रिप्ट किया जाता है (नीचे देखें) ताकि यह अगली बार वही काम न करे, जब तक कि कोई | प्रत्येक निर्देश के क्रियान्वित होने के बाद, दोषी निर्देश एन्क्रिप्ट किया जाता है (नीचे देखें) ताकि यह अगली बार वही काम न करे, जब तक कि कोई जंप न लगे। जंप के ठीक बाद, मालबोलगे प्रत्यक्ष रूप से उस निर्देश को एन्क्रिप्ट करेगा जिस पर उसने जंप किया। फिर, '''c''' और '''d''' दोनों के मानों में एक की वृद्धि की जाती है और अगला निर्देश निष्पादित किया जाता है। | ||
=== | === दुर्बल संचालन === | ||
दोनों इनपुट के प्रत्येक त्रिअंकीय अंक के लिए, परिणाम का त्रिअंकीय अंक प्राप्त करने के लिए निम्न तालिका का उपयोग करें। उदाहरण के लिए, | दोनों इनपुट के प्रत्येक त्रिअंकीय अंक के लिए, परिणाम का त्रिअंकीय अंक प्राप्त करने के लिए निम्न तालिका का उपयोग करें। उदाहरण के लिए, '''crz 0001112220, 0120120120''' देता है। | ||
{| style="margin:auto;" class="wikitable" | {| style="margin:auto;" class="wikitable" | ||
|+ | |+ क्रेजी संक्रिया<ref name=":0">{{Cite web | ||
| title = Interview with Ben Olmstead | | title = Interview with Ben Olmstead | ||
| url = https://esoteric.codes/blog/interview-with-ben-olmstead | | url = https://esoteric.codes/blog/interview-with-ben-olmstead | ||
| Line 176: | Line 177: | ||
| accessdate = 2017-06-09}}</ref> | | accessdate = 2017-06-09}}</ref> | ||
|- style="text-align:center;" | |- style="text-align:center;" | ||
! colspan="2" rowspan="2" | | ! colspan="2" rowspan="2" | सीआरजेड !! colspan="3" | इनपुट 2 | ||
|- style="text-align:center;" | |- style="text-align:center;" | ||
! 0 !! 1 !! 2 | ! 0 !! 1 !! 2 | ||
|- style="text-align:center;" | |- style="text-align:center;" | ||
! rowspan="3" | | ! rowspan="3" | इनपुट 1 !! 0 | ||
| 1 || 0 || 0 | | 1 || 0 || 0 | ||
|- style="text-align:center;" | |- style="text-align:center;" | ||
| Line 191: | Line 192: | ||
=== | === कूटलेखन === | ||
एक निर्देश के क्रियान्वित होने के बाद, ''[c]'' (इसमें कुछ भी जोड़े बिना) का मान [[मॉड्यूल ऑपरेशन]] 94 से | एक निर्देश के क्रियान्वित होने के बाद, '''''[c]''''' (इसमें कुछ भी जोड़े बिना) का मान [[मॉड्यूल ऑपरेशन|मॉड्यूल संक्रिया]] 94 से परिवर्तित कर दिया जाएगा। फिर, परिणाम निम्नलिखित दो समकक्ष विधियों में से एक के साथ जोड़ा जाता है। | ||
; विधि 1: नीचे परिणाम प्राप्त करें। इसके नीचे के | ; विधि 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 | |||