रीड-इवल-प्रिंट लूप: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Computer programming environment}}
{{Short description|Computer programming environment}}
रीड-इवल-प्रिंट लूप (आरईपीएल), जिसे इंटरैक्टिव टॉपलेवल या लैंग्वेज शेल भी कहा जाता है, सरल इंटरैक्टिव [[कंप्यूटर प्रोग्रामिंग]] वातावरण है जो एकल उपयोगकर्ता इनपुट लेता है, उन्हें निष्पादित करता है, और उपयोगकर्ता को परिणाम लौटाता है; आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।<ref name="Grillmeyer 2013 p.239" />यह शब्द आमतौर पर क्लासिक [[लिस्प मशीन]] इंटरैक्टिव वातावरण के समान प्रोग्रामिंग इंटरफेस को संदर्भित करता है। सामान्य उदाहरणों में [[कमांड लाइन इंटरफेस]] | कमांड-लाइन [[शेल (कंप्यूटिंग)]] और [[प्रोग्रामिंग भाषा]]ओं के लिए समान वातावरण शामिल हैं, और तकनीक स्क्रिप्टिंग भाषाओं की बहुत विशेषता है।<ref>{{cite book
'''रीड-इवल-प्रिंट लूप''' ('''आरईपीएल'''), जिसे '''परस्पर संवादात्मक टॉपलेवल''' या '''भाषा शेल''' भी कहा जाता है, जिससे कि सरल परस्पर संवादात्मक [[कंप्यूटर प्रोग्रामिंग]] वातावरण होता है, जो एकल उपयोगकर्ता इनपुट लेता है, अतः उन्हें निष्पादित करता है और उपयोगकर्ता को परिणाम लौटाता है। इस प्रकार आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।<ref name="Grillmeyer 2013 p.239" /> यह शब्द सामान्यतः क्लासिक [[लिस्प मशीन]] परस्पर संवादात्मक वातावरण के समान प्रोग्रामिंग अंतःक्रिया को संदर्भित करता है। सामान्य उदाहरणों में कमांड-लाइन [[शेल (कंप्यूटिंग)]] और [[प्रोग्रामिंग भाषा|प्रोग्रामिंग भाषाओं]] के लिए समान वातावरण सम्मिलित होते हैं और तकनीक स्क्रिप्टिंग भाषाओं की अधिक विशेषता होती है।<ref>{{cite book
|title=The Computing Universe: A Journey through a Revolution
|title=The Computing Universe: A Journey through a Revolution
|first1=Tony
|first1=Tony
Line 13: Line 13:
== इतिहास ==
== इतिहास ==


1964 में, [[पीडीपी-1]] पर [[लिस्प (प्रोग्रामिंग भाषा)]] के कार्यान्वयन के लिए एल. पीटर ड्यूश और [[एडमंड बर्कले]] द्वारा रीड-ईवल-प्रिंट चक्र अभिव्यक्ति का उपयोग किया गया था।<ref>{{Citation |url=http://s3data.computerhistory.org/pdp-1/DEC.pdp_1.1964.102650371.pdf |page=[http://s3data.computerhistory.org/pdp-1/DEC.pdp_1.1964.102650371.pdf#page=16 15] |title=The LISP Implementation for the PDP-1 Computer |author=L. Peter Deutsch |author2 = Edmund Berkeley}}</ref>
सन्न 1964 में, [[पीडीपी-1]] पर [[लिस्प (प्रोग्रामिंग भाषा)]] के कार्यान्वयन के लिए एल. पीटर ड्यूश और [[एडमंड बर्कले]] द्वारा रीड-ईवल-प्रिंट चक्र अभिव्यक्ति का उपयोग किया गया था।<ref>{{Citation |url=http://s3data.computerhistory.org/pdp-1/DEC.pdp_1.1964.102650371.pdf |page=[http://s3data.computerhistory.org/pdp-1/DEC.pdp_1.1964.102650371.pdf#page=16 15] |title=The LISP Implementation for the PDP-1 Computer |author=L. Peter Deutsch |author2 = Edmund Berkeley}}</ref>
कम से कम 1980 के दशक से, संक्षिप्त रूप आरईपी लूप और आरईपीएल को स्कीम (प्रोग्रामिंग भाषा) के संदर्भ में प्रमाणित किया गया है।<ref>{{cite book |last1=Smith |first1=Jerry D. |title=योजना का परिचय|date=1988 |publisher=Englewood Cliffs, N.J. : Prentice Hall |isbn=978-0-13-496712-7 |page=[https://archive.org/details/introductiontosc0000smit/page/8 8] |url=https://archive.org/details/introductiontosc0000smit/page/8}}</ref><ref>{{cite web |last1=Hanson |first1=Chris |title=rep.scm -- Initial 1986 revision of MIT-Scheme |url=https://github.com/jaseemabid/mit-scheme/blob/47c68ef5fa41821c3f52f886ef69f99d232d10bb/v7/src/runtime/rep.scm |website=GitHub |access-date=11 June 2023 |date=1986}}</ref>
 
कम से कम सन्न 1980 के दशक से, संक्षिप्त रूप आरईपी लूप और आरईपीएल को स्कीम (प्रोग्रामिंग भाषा) के संदर्भ में प्रमाणित किया गया है।<ref>{{cite book |last1=Smith |first1=Jerry D. |title=योजना का परिचय|date=1988 |publisher=Englewood Cliffs, N.J. : Prentice Hall |isbn=978-0-13-496712-7 |page=[https://archive.org/details/introductiontosc0000smit/page/8 8] |url=https://archive.org/details/introductiontosc0000smit/page/8}}</ref><ref>{{cite web |last1=Hanson |first1=Chris |title=rep.scm -- Initial 1986 revision of MIT-Scheme |url=https://github.com/jaseemabid/mit-scheme/blob/47c68ef5fa41821c3f52f886ef69f99d232d10bb/v7/src/runtime/rep.scm |website=GitHub |access-date=11 June 2023 |date=1986}}</ref>
== सिंहावलोकन ==
== सिंहावलोकन ==
आरईपीएल में, उपयोगकर्ता या अधिक अभिव्यक्तियाँ दर्ज करता है (संपूर्ण [[अनुवाद इकाई (प्रोग्रामिंग)]] के बजाय) और आरईपीएल उनका मूल्यांकन करता है और परिणाम प्रदर्शित करता है।<ref name="Grillmeyer 2013 p.239">{{cite book | last=Grillmeyer | first=O. | title=योजना के साथ कंप्यूटर विज्ञान की खोज| publisher=Springer New York | series=Undergraduate Texts in Computer Science | year=2013 | isbn=978-1-4757-2937-5 | url=https://books.google.com/books?id=GoXjBwAAQBAJ | access-date=2021-06-26 | page=239 | quote="The central component to the Scheme interpreter is the ''read-eval-print loop''. Commands are read in, then evaluated. Finally, the evaluated result is printed."}}</ref> रीड-इवल-प्रिंट लूप नाम लिस्प आदिम कार्यों के नाम से आया है जो इस कार्यक्षमता को लागू करते हैं:
आरईपीएल में, उपयोगकर्ता अधिक अभिव्यक्तियाँ अंकित करता है (संपूर्ण [[अनुवाद इकाई (प्रोग्रामिंग)]] के अतिरिक्त) और आरईपीएल उनका मूल्यांकन करता है और परिणाम प्रदर्शित करता है।<ref name="Grillmeyer 2013 p.239">{{cite book | last=Grillmeyer | first=O. | title=योजना के साथ कंप्यूटर विज्ञान की खोज| publisher=Springer New York | series=Undergraduate Texts in Computer Science | year=2013 | isbn=978-1-4757-2937-5 | url=https://books.google.com/books?id=GoXjBwAAQBAJ | access-date=2021-06-26 | page=239 | quote="The central component to the Scheme interpreter is the ''read-eval-print loop''. Commands are read in, then evaluated. Finally, the evaluated result is printed."}}</ref> रीड-इवल-प्रिंट लूप नाम लिस्प आदिम कार्यों के नाम से आया है जो इस कार्यक्षमता को क्रियान्वित करते हैं।


* रीड फ़ंक्शन उपयोगकर्ता से अभिव्यक्ति स्वीकार करता है, और इसे मेमोरी में डेटा संरचना में [[पदच्छेद]] करता है। उदाहरण के लिए, उपयोगकर्ता [[ एस-अभिव्यक्ति |एस-अभिव्यक्ति]] दर्ज कर सकता है <code>(+ 1 2 3)</code>, जिसे चार डेटा तत्वों वाली [[लिंक्ड सूची]] में पार्स किया गया है।
* फलन पढ़ना उपयोगकर्ता से अभिव्यक्ति स्वीकार करता है और इसे मेमोरी में डेटा संरचना में [[पदच्छेद]] करता है। उदाहरण के लिए, उपयोगकर्ता [[ एस-अभिव्यक्ति |एस-अभिव्यक्ति]] <code>(+ 1 2 3)</code> अंकित कर सकता है, जिसे चार डेटा तत्वों वाली [[लिंक्ड सूची]] में पार्स किया गया है।
* [[eval]] फ़ंक्शन इस आंतरिक डेटा संरचना को लेता है और इसका मूल्यांकन करता है। लिस्प में, किसी फ़ंक्शन के नाम से शुरू होने वाले एस-एक्सप्रेशन का मूल्यांकन करने का अर्थ है उस फ़ंक्शन को उन तर्कों पर कॉल करना जो अभिव्यक्ति के बाकी हिस्सों को बनाते हैं। तो समारोह <code>+</code> जिरह पर बुलाया जाता है <code>1 2 3</code>, परिणाम दे रहा है <code>6</code>.
* [[eval]] फलन इस आंतरिक डेटा संरचना को लेता है और इसका मूल्यांकन करता है। इस प्रकार लिस्प में, किसी फलन के नाम से प्रारंभ होने वाले एस-एक्सप्रेशन का मूल्यांकन करने का अर्थ यह है कि उस फलन को उन तर्कों पर कॉल किया जाता है, जो अभिव्यक्ति के बाकी भागों को बनाते हैं। तब फलन <code>+</code> को तर्क <code>1 2 3</code> पर कॉल किया जाता है, जिससे परिणाम <code>6</code> मिलता है।
* प्रिंट फ़ंक्शन eval द्वारा प्राप्त परिणाम लेता है, और इसे उपयोगकर्ता को प्रिंट करता है। यदि यह जटिल अभिव्यक्ति है, तो इसे समझना आसान बनाने के लिए इसे [[Prettyprint]]|pretty-printed किया जा सकता है।
* प्रिंट फलन eval द्वारा प्राप्त परिणाम लेता है और इसे उपयोगकर्ता को प्रिंट करता है। यदि यह जटिल अभिव्यक्ति है, तब इसे समझना सरल बनाने के लिए इसे सुंदर रूप से मुद्रित किया जा सकता है।


विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है, लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है।
विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है और लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है।


आरईपीएल [[खोजपूर्ण प्रोग्रामिंग]] और [[डिबगिंग]] की सुविधा प्रदान करते हैं क्योंकि प्रोग्रामर अगले पढ़ने के लिए कौन सी अभिव्यक्ति प्रदान करनी है यह तय करने से पहले मुद्रित परिणाम का निरीक्षण कर सकता है। रीड-इवल-प्रिंट लूप में प्रोग्रामर को क्लासिक एडिट-कंपाइल-रन-डीबग चक्र की तुलना में अधिक बार शामिल किया जाता है।
आरईपीएल [[खोजपूर्ण प्रोग्रामिंग]] और [[डिबगिंग]] की सुविधा प्रदान करते हैं जिससे कि प्रोग्रामर अगले पढ़ने के लिए कौन सी अभिव्यक्ति प्रदान करनी है यह तय करने से पहले मुद्रित परिणाम का निरीक्षण कर सकता है। इस प्रकार रीड-इवल-प्रिंट लूप में प्रोग्रामर को क्लासिक एडिट-कंपाइल-रन-डीबग चक्र की तुलना में अधिक बार सम्मिलित किया जाता है।


क्योंकि प्रिंट फ़ंक्शन उसी पाठ्य प्रारूप में आउटपुट करता है जिसे रीड फ़ंक्शन इनपुट के लिए उपयोग करता है, अधिकांश परिणाम ऐसे रूप में मुद्रित होते हैं जिन्हें कॉपी किया जा सकता है और आरईपीएल में वापस चिपकाया जा सकता है। हालाँकि, कभी-कभी उन तत्वों के अभ्यावेदन को मुद्रित करना आवश्यक होता है जिन्हें समझदारी से वापस नहीं पढ़ा जा सकता है, जैसे सॉकेट हैंडल या जटिल वर्ग उदाहरण। इन मामलों में, अपठनीय वस्तुओं के लिए वाक्यविन्यास मौजूद होना चाहिए। पायथन में, यह है <code><__module__.class instance></code> अंकन, और आम लिस्प में, <code>#<whatever></code> प्रपत्र। [[CLIM]], [[SLIME]] और [[प्रतीकात्मकता]] [[लिस्प मशीन]] का REPL अपठनीय वस्तुओं को भी पढ़ सकता है। वे प्रत्येक आउटपुट के लिए रिकॉर्ड करते हैं कि कौन सा ऑब्जेक्ट मुद्रित किया गया था। बाद में जब कोड को वापस पढ़ा जाएगा, तो ऑब्जेक्ट को मुद्रित आउटपुट से पुनर्प्राप्त किया जाएगा।
जिससे कि प्रिंट फलन उसी पाठ्य प्रारूप में आउटपुट करता है, जिसे रीड फलन इनपुट के लिए उपयोग करता है, अतः अधिकांश परिणाम ऐसे रूप में मुद्रित होते हैं जिन्हें कॉपी किया जा सकता है और आरईपीएल में वापस चिपकाया जा सकता है। चूँकि, कभी-कभी उन तत्वों के अभ्यावेदन को मुद्रित करना आवश्यक होता है जिन्हें समझदारी से वापस नहीं पढ़ा जा सकता है। जैसे उदाहरण के लिए, सॉकेट हैंडल या जटिल वर्ग इत्यादि। इन स्थितियों में, अपठनीय वस्तुओं के लिए वाक्यविन्यास उपस्तिथ होते है। यह पायथन में, <code><__मॉड्यूल__.क्लास उदाहरण></code> अंकन और सामान्य लिस्प में, <code><व्हाटएवर></code> प्रपत्र होता है। इस प्रकार [[CLIM|कलीम]], [[SLIME|स्लिम]] और [[प्रतीकात्मकता]] [[लिस्प मशीन]] का आरईपीएल अपठनीय वस्तुओं को भी पढ़ सकता है। वह प्रत्येक आउटपुट के लिए रिकॉर्ड करते हैं कि कौन सा ऑब्जेक्ट मुद्रित किया गया था। जिसे बाद में जब कोड को वापस पढ़ा जाता है, तब ऑब्जेक्ट को मुद्रित आउटपुट से पुनर्प्राप्त किया जाता है।


किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए REPLs बनाए जा सकते हैं। संकलित भाषाओं के लिए आरईपीएल समर्थन आमतौर पर वर्चुअल मशीन के शीर्ष पर [[ दुभाषिया (कंप्यूटिंग) |दुभाषिया (कंप्यूटिंग)]] को लागू करके प्राप्त किया जाता है जो कंपाइलर को इंटरफ़ेस प्रदान करता है। उदाहरण के लिए, जेडीके 9 से शुरू करके, [[जावा (प्रोग्रामिंग भाषा)]] में [[जेशेल]] को भाषा में कमांड-लाइन इंटरफ़ेस के रूप में शामिल किया गया। विभिन्न अन्य भाषाओं में डाउनलोड के लिए तृतीय-पक्ष उपकरण उपलब्ध हैं जो भाषा के साथ समान शेल इंटरैक्शन प्रदान करते हैं।
किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए आरईपीएलएस बनाए जा सकते हैं। इस प्रकार संकलित भाषाओं के लिए आरईपीएल समर्थन सामान्यतः वास्तविक मशीन के शीर्ष पर [[ दुभाषिया (कंप्यूटिंग) |दुभाषिया (कंप्यूटिंग)]] को क्रियान्वित करके प्राप्त किया जाता है, जो कंपाइलर को अंतःक्रिया प्रदान करता है। उदाहरण के लिए, जेडीके 9 से प्रारंभ करके, [[जावा (प्रोग्रामिंग भाषा)]] में [[जेशेल]] को भाषा में कमांड-लाइन अंतःक्रिया के रूप में सम्मिलित किया गया है। अतः विभिन्न अन्य भाषाओं में डाउनलोड के लिए तृतीय-पक्ष उपकरण उपलब्ध होता हैं जो भाषा के साथ समान शेल परस्पर क्रिया प्रदान करते हैं।


== उपयोग ==
== उपयोग ==
शेल (कंप्यूटिंग) के रूप में, आरईपीएल वातावरण उपयोगकर्ताओं को प्रोग्रामिंग क्षमताओं तक पहुंच प्रदान करने के अलावा ऑपरेटिंग सिस्टम की प्रासंगिक सुविधाओं तक पहुंचने की अनुमति देता है। ऑपरेटिंग सिस्टम शेल के बाहर आरईपीएल का सबसे आम उपयोग इंटरैक्टिव [[ सॉफ़्टवेयर प्रोटोटाइप |सॉफ़्टवेयर प्रोटोटाइप]] के लिए है।<ref name="Binsbergen">{{cite conference | last1=van Binsbergen | first1=L. Thomas | last2=Verano Merino | first2=Mauricio | last3=Jeanjean | first3=Pierre | last4=van der Storm | first4=Tijs | last5=Combemale | first5=Benoit | last6=Barais | first6=Olivier | title=Proceedings of the 2020 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software | chapter=A principled approach to REPL interpreters | publisher=ACM | publication-place=New York, NY, USA | date=2020-11-17 | pages=84–100 | isbn=978-1-4503-8178-9 | doi=10.1145/3426428.3426917 }}</ref> अन्य उपयोगों में गणितीय गणना, वैज्ञानिक विश्लेषण को एकीकृत करने वाले दस्तावेज़ बनाना (जैसे [[आईपीथॉन]]), इंटरैक्टिव सॉफ़्टवेयर रखरखाव, [[ बेंच मार्किंग |बेंच मार्किंग]] और एल्गोरिदम अन्वेषण शामिल हैं।
सामान्यतः शेल (कंप्यूटिंग) के रूप में, आरईपीएल वातावरण उपयोगकर्ताओं को प्रोग्रामिंग क्षमताओं तक पहुंच प्रदान करने के अतिरिक्त ऑपरेटिंग प्रणाली की प्रासंगिक सुविधाओं तक पहुंचने की अनुमति देता है। इस प्रकार ऑपरेटिंग प्रणाली शेल के बाहर आरईपीएल का सबसे सामान्य उपयोग परस्पर संवादात्मक [[ सॉफ़्टवेयर प्रोटोटाइप |सॉफ़्टवेयर प्रोटोटाइप]] के लिए होता है।<ref name="Binsbergen">{{cite conference | last1=van Binsbergen | first1=L. Thomas | last2=Verano Merino | first2=Mauricio | last3=Jeanjean | first3=Pierre | last4=van der Storm | first4=Tijs | last5=Combemale | first5=Benoit | last6=Barais | first6=Olivier | title=Proceedings of the 2020 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software | chapter=A principled approach to REPL interpreters | publisher=ACM | publication-place=New York, NY, USA | date=2020-11-17 | pages=84–100 | isbn=978-1-4503-8178-9 | doi=10.1145/3426428.3426917 }}</ref> अतः अन्य उपयोगों में गणितीय गणना, वैज्ञानिक विश्लेषण को एकीकृत करने वाले दस्तावेज़ बनाना (जैसे [[आईपीथॉन]]), परस्पर संवादात्मक सॉफ़्टवेयर रखरखाव, [[ बेंच मार्किंग |बेंच मार्किंग]] और एल्गोरिदम अन्वेषण सम्मिलित होते हैं।


== लिस्प विशिष्टताएँ ==
== लिस्प विशिष्टताएँ ==


=== कार्यान्वयन ===
=== कार्यान्वयन ===
न्यूनतम परिभाषा है: <syntaxhighlight lang="Scheme">
यह न्यूनतम परिभाषा है। <syntaxhighlight lang="Scheme">
(define (REPL env)
(define (REPL env)
   (print (eval env (read)))
   (print (eval env (read)))
   (REPL env) )</syntaxhighlight>
   (REPL env) )</syntaxhighlight>
कहाँ <code>env</code> प्रारंभिक का प्रतिनिधित्व करता है <code>eval</code>-उत्साह का माहौल. ऐसा भी माना जाता है <code>env</code> द्वारा विनाशकारी रूप से अद्यतन किया जा सकता है <code>eval</code>.
जहाँ <code>ईएनवी</code> प्रारंभिक मूल्यांकन वातावरण का प्रतिनिधित्व करता है। यह भी माना जाता है कि <code>एवल</code> द्वारा <code>ईएनवी</code> को विनाशकारी रूप से अद्यतन किया जा सकता है।


=== कार्यक्षमता ===
=== कार्यक्षमता ===
लिस्प आरईपीएल द्वारा प्रदान की जाने वाली विशिष्ट कार्यक्षमता में शामिल हैं:
सामान्यतः लिस्प आरईपीएल द्वारा प्रदान की जाने वाली विशिष्ट कार्यक्षमता में सम्मिलित होता हैं।


* इनपुट और आउटपुट का इतिहास।
* इनपुट और आउटपुट का इतिहास।
* इनपुट अभिव्यक्तियों और परिणामों के लिए वेरिएबल सेट किए गए हैं। ये वेरिएबल आरईपीएल में भी उपलब्ध हैं। उदाहरण के लिए कॉमन लिस्प में <code>*</code> अंतिम परिणाम को संदर्भित करता है, <code>**</code> और <code>***</code> उससे पहले के नतीजों के लिए.
* इनपुट अभिव्यक्तियों और परिणामों के लिए चर समूह किए गए हैं। यह चर आरईपीएल में भी उपलब्ध होते हैं। उदाहरण के लिए, सामान्य लिस्प में <code>*</code> अंतिम परिणाम को संदर्भित करता है, अतः <code>**</code> और <code>***</code> उससे पहले के परिणामों को संदर्भित करता है।
* आरईपीएल के स्तर। कई लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के दौरान कोई त्रुटि होती है, तो सिस्टम को त्रुटि संदेश के साथ शीर्ष स्तर पर वापस नहीं भेजा जाता है। इसके बजाय त्रुटि संदर्भ में नया आरईपीएल, स्तर गहरा, शुरू किया गया है। उपयोगकर्ता तब समस्या का निरीक्षण कर सकता है, उसे ठीक कर सकता है और जारी रख सकता है - यदि संभव हो तो। यदि ऐसे डिबग आरईपीएल में कोई त्रुटि होती है, तो और आरईपीएल, फिर से स्तर गहरा, शुरू किया जाता है। अक्सर आरईपीएल विशेष डिबग कमांड प्रदान करता है।
* आरईपीएल के स्तर अनेक लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के समय कोई त्रुटि होती है, तब प्रणाली को त्रुटि संदेश के साथ शीर्ष स्तर पर वापस नहीं भेजा जाता है। इसके अतिरिक्त त्रुटि संदर्भ में नया आरईपीएल, स्तर गहरा, प्रारंभ किया गया है। इस प्रकार उपयोगकर्ता तब समस्या का निरीक्षण कर सकता है, यदि संभव होता है तब उसे ठीक कर सकता है और जारी रख सकता है। यदि ऐसे डिबग आरईपीएल में कोई त्रुटि होती है, तब और आरईपीएल, पुनः गहरा स्तर प्रारंभ किया जाता है। अतः अधिकांशतः आरईपीएल विशेष डिबग कमांड प्रदान करता है।
* [[त्रुटि प्रबंधन]]आरईपीएल पुनरारंभ प्रदान करता है। जब कोई त्रुटि होती है, तो निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है।
* [[त्रुटि प्रबंधन]] आरईपीएल पुनरारंभ प्रदान करता है। इस प्रकार जब कोई त्रुटि होती है, तब निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है।
* [[माउस (कंप्यूटिंग)]] डेटा ऑब्जेक्ट के संवेदनशील इनपुट और आउटपुट।
* डेटा ऑब्जेक्ट का [[माउस (कंप्यूटिंग)]] संवेदनशील इनपुट और आउटपुट होता है।
* प्रतीकों, पथनामों, वर्ग नामों और अन्य वस्तुओं पर इनपुट संपादन और संदर्भ विशिष्ट पूर्णता।
* प्रतीकों, पथनामों, वर्ग नामों और अन्य वस्तुओं पर इनपुट संपादन और संदर्भ विशिष्ट पूर्णता होती है।
* आदेशों के लिए सहायता और दस्तावेज़ीकरण।
* आदेशों के लिए सहायता और दस्तावेज़ीकरण।
* पाठक को नियंत्रित करने के लिए [[चर (प्रोग्रामिंग)]]। उदाहरण के लिए, वेरिएबल *रीड-बेस* नियंत्रित करता है जिसमें आधार संख्याएँ डिफ़ॉल्ट रूप से पढ़ी जाती हैं।
* पाठक को नियंत्रित करने के लिए [[चर (प्रोग्रामिंग)]] *रीड-आधार* नियंत्रित करता है। जिसमें आधार संख्याएँ डिफ़ॉल्ट रूप से पढ़ी जाती हैं।
* प्रिंटर को नियंत्रित करने के लिए वेरिएबल। उदाहरण: मुद्रित करने के लिए भावों की अधिकतम लंबाई या अधिकतम गहराई।
* प्रिंटर को नियंत्रित करने के लिए चर। उदाहरण के लिए, मुद्रित करने के लिए भावों की अधिकतम लंबाई या अधिकतम गहराई।
* अतिरिक्त कमांड सिंटैक्स. कुछ आरईपीएल में ऐसे कमांड होते हैं जो एस-एक्सप्रेशन सिंटैक्स का पालन नहीं करते हैं, लेकिन अक्सर तर्क के रूप में लिस्प डेटा के साथ काम करते हैं।
* अतिरिक्त कमांड वाक्य-विन्यास कुछ आरईपीएल में ऐसे कमांड होते हैं, जो एस-एक्सप्रेशन वाक्य-विन्यास का पालन नहीं करते हैं, किन्तु अधिकांशतः तर्क के रूप में लिस्प डेटा के साथ कार्य करते हैं।
* ग्राफिकल उत्तर। कुछ लिस्प आरईपीएल (सीएलआईएम श्रोता उदाहरण है) ग्राफिकल इनपुट और आउटपुट भी स्वीकार करते हैं।
* ग्राफिकल आरईपीएलएस कुछ लिस्प आरईपीएलएस (सीएलआईएम श्रोता उदाहरण है) ग्राफिकल इनपुट और आउटपुट भी स्वीकार करते हैं।


== यह भी देखें ==
== यह भी देखें ==
*[[ प्रत्यक्ष मोड ]]
*[[ प्रत्यक्ष मोड | प्रत्यक्ष प्रणाली]]


== संदर्भ ==
== संदर्भ ==
Line 65: Line 66:


== बाहरी संबंध ==
== बाहरी संबंध ==
* [[Paul Graham (programmer)|Paul Graham]] has written a [http://www.paulgraham.com/rootsoflisp.html description of a REPL implementation] in Common Lisp.
* [[Paul Graham (programmer)|Paul Graham]] has written a [http://www.paulgraham.com/rootsoflisp.html description of a आरईपीएल implementation] in Common Lisp.
* Joël Franusic [http://joel.franusic.com/Online-REPs-and-REPLs Online-REPs-and-REPLs list]
* Joël Franusic [http://joel.franusic.com/Online-REPs-and-REPLs Online-REPs-and-आरईपीएलs list]
 
{{DEFAULTSORT:Read-Eval-Print Loop}}[[Category: कमान के गोले]] [[Category: लिस्प (प्रोग्रामिंग भाषा)]] [[Category: दुभाषिए (कंप्यूटिंग)]] [[Category: यूजर इंटरफ़ेस तकनीक]]
 


{{DEFAULTSORT:Read-Eval-Print Loop}}


[[Category: Machine Translated Page]]
[[Category:CS1 maint]]
[[Category:Created On 23/06/2023]]
[[Category:Created On 23/06/2023|Read-Eval-Print Loop]]
[[Category:Lua-based templates|Read-Eval-Print Loop]]
[[Category:Machine Translated Page|Read-Eval-Print Loop]]
[[Category:Pages with script errors|Read-Eval-Print Loop]]
[[Category:Templates Vigyan Ready|Read-Eval-Print Loop]]
[[Category:Templates that add a tracking category|Read-Eval-Print Loop]]
[[Category:Templates that generate short descriptions|Read-Eval-Print Loop]]
[[Category:Templates using TemplateData|Read-Eval-Print Loop]]
[[Category:कमान के गोले|Read-Eval-Print Loop]]
[[Category:दुभाषिए (कंप्यूटिंग)|Read-Eval-Print Loop]]
[[Category:यूजर इंटरफ़ेस तकनीक|Read-Eval-Print Loop]]
[[Category:लिस्प (प्रोग्रामिंग भाषा)|Read-Eval-Print Loop]]

Latest revision as of 16:39, 7 July 2023

रीड-इवल-प्रिंट लूप (आरईपीएल), जिसे परस्पर संवादात्मक टॉपलेवल या भाषा शेल भी कहा जाता है, जिससे कि सरल परस्पर संवादात्मक कंप्यूटर प्रोग्रामिंग वातावरण होता है, जो एकल उपयोगकर्ता इनपुट लेता है, अतः उन्हें निष्पादित करता है और उपयोगकर्ता को परिणाम लौटाता है। इस प्रकार आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।[1] यह शब्द सामान्यतः क्लासिक लिस्प मशीन परस्पर संवादात्मक वातावरण के समान प्रोग्रामिंग अंतःक्रिया को संदर्भित करता है। सामान्य उदाहरणों में कमांड-लाइन शेल (कंप्यूटिंग) और प्रोग्रामिंग भाषाओं के लिए समान वातावरण सम्मिलित होते हैं और तकनीक स्क्रिप्टिंग भाषाओं की अधिक विशेषता होती है।[2]

इतिहास

सन्न 1964 में, पीडीपी-1 पर लिस्प (प्रोग्रामिंग भाषा) के कार्यान्वयन के लिए एल. पीटर ड्यूश और एडमंड बर्कले द्वारा रीड-ईवल-प्रिंट चक्र अभिव्यक्ति का उपयोग किया गया था।[3]

कम से कम सन्न 1980 के दशक से, संक्षिप्त रूप आरईपी लूप और आरईपीएल को स्कीम (प्रोग्रामिंग भाषा) के संदर्भ में प्रमाणित किया गया है।[4][5]

सिंहावलोकन

आरईपीएल में, उपयोगकर्ता अधिक अभिव्यक्तियाँ अंकित करता है (संपूर्ण अनुवाद इकाई (प्रोग्रामिंग) के अतिरिक्त) और आरईपीएल उनका मूल्यांकन करता है और परिणाम प्रदर्शित करता है।[1] रीड-इवल-प्रिंट लूप नाम लिस्प आदिम कार्यों के नाम से आया है जो इस कार्यक्षमता को क्रियान्वित करते हैं।

  • फलन पढ़ना उपयोगकर्ता से अभिव्यक्ति स्वीकार करता है और इसे मेमोरी में डेटा संरचना में पदच्छेद करता है। उदाहरण के लिए, उपयोगकर्ता एस-अभिव्यक्ति (+ 1 2 3) अंकित कर सकता है, जिसे चार डेटा तत्वों वाली लिंक्ड सूची में पार्स किया गया है।
  • eval फलन इस आंतरिक डेटा संरचना को लेता है और इसका मूल्यांकन करता है। इस प्रकार लिस्प में, किसी फलन के नाम से प्रारंभ होने वाले एस-एक्सप्रेशन का मूल्यांकन करने का अर्थ यह है कि उस फलन को उन तर्कों पर कॉल किया जाता है, जो अभिव्यक्ति के बाकी भागों को बनाते हैं। तब फलन + को तर्क 1 2 3 पर कॉल किया जाता है, जिससे परिणाम 6 मिलता है।
  • प्रिंट फलन eval द्वारा प्राप्त परिणाम लेता है और इसे उपयोगकर्ता को प्रिंट करता है। यदि यह जटिल अभिव्यक्ति है, तब इसे समझना सरल बनाने के लिए इसे सुंदर रूप से मुद्रित किया जा सकता है।

विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है और लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है।

आरईपीएल खोजपूर्ण प्रोग्रामिंग और डिबगिंग की सुविधा प्रदान करते हैं जिससे कि प्रोग्रामर अगले पढ़ने के लिए कौन सी अभिव्यक्ति प्रदान करनी है यह तय करने से पहले मुद्रित परिणाम का निरीक्षण कर सकता है। इस प्रकार रीड-इवल-प्रिंट लूप में प्रोग्रामर को क्लासिक एडिट-कंपाइल-रन-डीबग चक्र की तुलना में अधिक बार सम्मिलित किया जाता है।

जिससे कि प्रिंट फलन उसी पाठ्य प्रारूप में आउटपुट करता है, जिसे रीड फलन इनपुट के लिए उपयोग करता है, अतः अधिकांश परिणाम ऐसे रूप में मुद्रित होते हैं जिन्हें कॉपी किया जा सकता है और आरईपीएल में वापस चिपकाया जा सकता है। चूँकि, कभी-कभी उन तत्वों के अभ्यावेदन को मुद्रित करना आवश्यक होता है जिन्हें समझदारी से वापस नहीं पढ़ा जा सकता है। जैसे उदाहरण के लिए, सॉकेट हैंडल या जटिल वर्ग इत्यादि। इन स्थितियों में, अपठनीय वस्तुओं के लिए वाक्यविन्यास उपस्तिथ होते है। यह पायथन में, <__मॉड्यूल__.क्लास उदाहरण> अंकन और सामान्य लिस्प में, <व्हाटएवर> प्रपत्र होता है। इस प्रकार कलीम, स्लिम और प्रतीकात्मकता लिस्प मशीन का आरईपीएल अपठनीय वस्तुओं को भी पढ़ सकता है। वह प्रत्येक आउटपुट के लिए रिकॉर्ड करते हैं कि कौन सा ऑब्जेक्ट मुद्रित किया गया था। जिसे बाद में जब कोड को वापस पढ़ा जाता है, तब ऑब्जेक्ट को मुद्रित आउटपुट से पुनर्प्राप्त किया जाता है।

किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए आरईपीएलएस बनाए जा सकते हैं। इस प्रकार संकलित भाषाओं के लिए आरईपीएल समर्थन सामान्यतः वास्तविक मशीन के शीर्ष पर दुभाषिया (कंप्यूटिंग) को क्रियान्वित करके प्राप्त किया जाता है, जो कंपाइलर को अंतःक्रिया प्रदान करता है। उदाहरण के लिए, जेडीके 9 से प्रारंभ करके, जावा (प्रोग्रामिंग भाषा) में जेशेल को भाषा में कमांड-लाइन अंतःक्रिया के रूप में सम्मिलित किया गया है। अतः विभिन्न अन्य भाषाओं में डाउनलोड के लिए तृतीय-पक्ष उपकरण उपलब्ध होता हैं जो भाषा के साथ समान शेल परस्पर क्रिया प्रदान करते हैं।

उपयोग

सामान्यतः शेल (कंप्यूटिंग) के रूप में, आरईपीएल वातावरण उपयोगकर्ताओं को प्रोग्रामिंग क्षमताओं तक पहुंच प्रदान करने के अतिरिक्त ऑपरेटिंग प्रणाली की प्रासंगिक सुविधाओं तक पहुंचने की अनुमति देता है। इस प्रकार ऑपरेटिंग प्रणाली शेल के बाहर आरईपीएल का सबसे सामान्य उपयोग परस्पर संवादात्मक सॉफ़्टवेयर प्रोटोटाइप के लिए होता है।[6] अतः अन्य उपयोगों में गणितीय गणना, वैज्ञानिक विश्लेषण को एकीकृत करने वाले दस्तावेज़ बनाना (जैसे आईपीथॉन), परस्पर संवादात्मक सॉफ़्टवेयर रखरखाव, बेंच मार्किंग और एल्गोरिदम अन्वेषण सम्मिलित होते हैं।

लिस्प विशिष्टताएँ

कार्यान्वयन

यह न्यूनतम परिभाषा है।

(define (REPL env)
  (print (eval env (read)))
  (REPL env) )

जहाँ ईएनवी प्रारंभिक मूल्यांकन वातावरण का प्रतिनिधित्व करता है। यह भी माना जाता है कि एवल द्वारा ईएनवी को विनाशकारी रूप से अद्यतन किया जा सकता है।

कार्यक्षमता

सामान्यतः लिस्प आरईपीएल द्वारा प्रदान की जाने वाली विशिष्ट कार्यक्षमता में सम्मिलित होता हैं।

  • इनपुट और आउटपुट का इतिहास।
  • इनपुट अभिव्यक्तियों और परिणामों के लिए चर समूह किए गए हैं। यह चर आरईपीएल में भी उपलब्ध होते हैं। उदाहरण के लिए, सामान्य लिस्प में * अंतिम परिणाम को संदर्भित करता है, अतः ** और *** उससे पहले के परिणामों को संदर्भित करता है।
  • आरईपीएल के स्तर अनेक लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के समय कोई त्रुटि होती है, तब प्रणाली को त्रुटि संदेश के साथ शीर्ष स्तर पर वापस नहीं भेजा जाता है। इसके अतिरिक्त त्रुटि संदर्भ में नया आरईपीएल, स्तर गहरा, प्रारंभ किया गया है। इस प्रकार उपयोगकर्ता तब समस्या का निरीक्षण कर सकता है, यदि संभव होता है तब उसे ठीक कर सकता है और जारी रख सकता है। यदि ऐसे डिबग आरईपीएल में कोई त्रुटि होती है, तब और आरईपीएल, पुनः गहरा स्तर प्रारंभ किया जाता है। अतः अधिकांशतः आरईपीएल विशेष डिबग कमांड प्रदान करता है।
  • त्रुटि प्रबंधन आरईपीएल पुनरारंभ प्रदान करता है। इस प्रकार जब कोई त्रुटि होती है, तब निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है।
  • डेटा ऑब्जेक्ट का माउस (कंप्यूटिंग) संवेदनशील इनपुट और आउटपुट होता है।
  • प्रतीकों, पथनामों, वर्ग नामों और अन्य वस्तुओं पर इनपुट संपादन और संदर्भ विशिष्ट पूर्णता होती है।
  • आदेशों के लिए सहायता और दस्तावेज़ीकरण।
  • पाठक को नियंत्रित करने के लिए चर (प्रोग्रामिंग) *रीड-आधार* नियंत्रित करता है। जिसमें आधार संख्याएँ डिफ़ॉल्ट रूप से पढ़ी जाती हैं।
  • प्रिंटर को नियंत्रित करने के लिए चर। उदाहरण के लिए, मुद्रित करने के लिए भावों की अधिकतम लंबाई या अधिकतम गहराई।
  • अतिरिक्त कमांड वाक्य-विन्यास कुछ आरईपीएल में ऐसे कमांड होते हैं, जो एस-एक्सप्रेशन वाक्य-विन्यास का पालन नहीं करते हैं, किन्तु अधिकांशतः तर्क के रूप में लिस्प डेटा के साथ कार्य करते हैं।
  • ग्राफिकल आरईपीएलएस कुछ लिस्प आरईपीएलएस (सीएलआईएम श्रोता उदाहरण है) ग्राफिकल इनपुट और आउटपुट भी स्वीकार करते हैं।

यह भी देखें

संदर्भ

  1. 1.0 1.1 Grillmeyer, O. (2013). योजना के साथ कंप्यूटर विज्ञान की खोज. Undergraduate Texts in Computer Science. Springer New York. p. 239. ISBN 978-1-4757-2937-5. Retrieved 2021-06-26. The central component to the Scheme interpreter is the read-eval-print loop. Commands are read in, then evaluated. Finally, the evaluated result is printed.
  2. Hey, Tony; Pápay, Gyuri (2014). The Computing Universe: A Journey through a Revolution. Cambridge University Press. p. 76. ISBN 978-1-316-12322-5, "A major characteristic of modern scripting languages is their interactivity, sometimes referred to as a REPL programming environment. ... The characteristics of ease of use and immediate execution with a REPL environment are sometimes taken as the definition of a scripting language."{{cite book}}: CS1 maint: postscript (link)
  3. L. Peter Deutsch; Edmund Berkeley, The LISP Implementation for the PDP-1 Computer (PDF), p. 15
  4. Smith, Jerry D. (1988). योजना का परिचय. Englewood Cliffs, N.J. : Prentice Hall. p. 8. ISBN 978-0-13-496712-7.
  5. Hanson, Chris (1986). "rep.scm -- Initial 1986 revision of MIT-Scheme". GitHub. Retrieved 11 June 2023.
  6. van Binsbergen, L. Thomas; Verano Merino, Mauricio; Jeanjean, Pierre; van der Storm, Tijs; Combemale, Benoit; Barais, Olivier (2020-11-17). "A principled approach to REPL interpreters". Proceedings of the 2020 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software. New York, NY, USA: ACM. pp. 84–100. doi:10.1145/3426428.3426917. ISBN 978-1-4503-8178-9.


बाहरी संबंध