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

From Vigyanwiki
(Created page with "{{Short description|Computer programming environment}} {{more citations needed|date=June 2015}} रीड-इवल-प्रिंट लूप (आरईपीएल), ज...")
 
No edit summary
Line 1: Line 1:
{{Short description|Computer programming environment}}
{{Short description|Computer programming environment}}
{{more citations needed|date=June 2015}}
रीड-इवल-प्रिंट लूप (आरईपीएल), जिसे इंटरैक्टिव टॉपलेवल या लैंग्वेज शेल भी कहा जाता है, सरल इंटरैक्टिव [[कंप्यूटर प्रोग्रामिंग]] वातावरण है जो एकल उपयोगकर्ता इनपुट लेता है, उन्हें निष्पादित करता है, और उपयोगकर्ता को परिणाम लौटाता है; आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।<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 12: Line 11:
|page=[https://books.google.com/books?id=q4FIBQAAQBAJ&pg=PA76&dq=repl+scripting 76]
|page=[https://books.google.com/books?id=q4FIBQAAQBAJ&pg=PA76&dq=repl+scripting 76]
|postscript=, "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."}}</ref>
|postscript=, "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."}}</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>
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 द्वारा प्राप्त परिणाम लेता है, और इसे उपयोगकर्ता को प्रिंट करता है। यदि यह जटिल अभिव्यक्ति है, तो इसे समझना आसान बनाने के लिए इसे [[Prettyprint]]|pretty-printed किया जा सकता है।


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


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


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


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


== यह भी देखें ==
== यह भी देखें ==

Revision as of 17:52, 30 June 2023

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

इतिहास

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

सिंहावलोकन

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

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

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

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

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

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

उपयोग

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

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

कार्यान्वयन

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

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

कहाँ env प्रारंभिक का प्रतिनिधित्व करता है eval-उत्साह का माहौल. ऐसा भी माना जाता है env द्वारा विनाशकारी रूप से अद्यतन किया जा सकता है eval.

कार्यक्षमता

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

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

यह भी देखें

संदर्भ

  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.


बाहरी संबंध