रीड-इवल-प्रिंट लूप: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Computer programming environment}} | {{Short description|Computer programming environment}} | ||
'''रीड-इवल-प्रिंट लूप''' ('''आरईपीएल'''), जिसे ''' | '''रीड-इवल-प्रिंट लूप''' ('''आरईपीएल'''), जिसे '''परस्पर संवादात्मक टॉपलेवल''' या '''लैंग्वेज शेल''' भी कहा जाता है, जिससे कि सरल परस्पर संवादात्मक [[कंप्यूटर प्रोग्रामिंग]] वातावरण होता है, जो एकल उपयोगकर्ता इनपुट लेता है, अतः उन्हें निष्पादित करता है और उपयोगकर्ता को परिणाम लौटाता है। इस प्रकार आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।<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 25: | Line 25: | ||
विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है और लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है। | विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है और लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है। | ||
आरईपीएल [[खोजपूर्ण प्रोग्रामिंग]] और [[डिबगिंग]] की | आरईपीएल [[खोजपूर्ण प्रोग्रामिंग]] और [[डिबगिंग]] की सुविधा प्रदान करते हैं जिससे कि प्रोग्रामर अगले पढ़ने के लिए कौन सी अभिव्यक्ति प्रदान करनी है यह तय करने से पहले मुद्रित परिणाम का निरीक्षण कर सकता है। इस प्रकार रीड-इवल-प्रिंट लूप में प्रोग्रामर को क्लासिक एडिट-कंपाइल-रन-डीबग चक्र की तुलना में अधिक बार सम्मिलित किया जाता है। | ||
जिससे कि प्रिंट फलन उसी पाठ्य प्रारूप में आउटपुट करता है, जिसे रीड फलन इनपुट के लिए उपयोग करता है, अतः अधिकांश परिणाम ऐसे रूप में मुद्रित होते हैं जिन्हें कॉपी किया जा सकता है और आरईपीएल में वापस चिपकाया जा सकता है। चूँकि, कभी-कभी उन तत्वों के अभ्यावेदन को मुद्रित करना आवश्यक होता है जिन्हें समझदारी से वापस नहीं पढ़ा जा सकता है। जैसे उदाहरण के लिए, सॉकेट हैंडल या जटिल वर्ग इत्यादि। इन स्थितियों में, अपठनीय वस्तुओं के लिए वाक्यविन्यास उपस्तिथ होते है। यह पायथन में, <code><__module__.class instance></code> अंकन और सामान्य लिस्प में, <code><व्हाटएवर></code> प्रपत्र होता है। इस प्रकार [[CLIM|कलीम]], [[SLIME|स्लिम]] और [[प्रतीकात्मकता]] [[लिस्प मशीन]] का आरईपीएल अपठनीय वस्तुओं को भी पढ़ सकता है। वह प्रत्येक आउटपुट के लिए रिकॉर्ड करते हैं कि कौन सा ऑब्जेक्ट मुद्रित किया गया था। जिसे बाद में जब कोड को वापस पढ़ा जाता है, तब ऑब्जेक्ट को मुद्रित आउटपुट से पुनर्प्राप्त किया जाता है। | |||
किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए | किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए आरईपीएलएस बनाए जा सकते हैं। इस प्रकार संकलित भाषाओं के लिए आरईपीएल समर्थन सामान्यतः वास्तविक मशीन के शीर्ष पर [[ दुभाषिया (कंप्यूटिंग) |दुभाषिया (कंप्यूटिंग)]] को क्रियान्वित करके प्राप्त किया जाता है, जो कंपाइलर को अंतःक्रिया प्रदान करता है। उदाहरण के लिए, जेडीके 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> अतः अन्य उपयोगों में गणितीय गणना, वैज्ञानिक विश्लेषण को एकीकृत करने वाले दस्तावेज़ बनाना (जैसे [[आईपीथॉन]]), परस्पर संवादात्मक सॉफ़्टवेयर रखरखाव, [[ बेंच मार्किंग |बेंच मार्किंग]] और एल्गोरिदम अन्वेषण सम्मिलित होते हैं। | ||
== लिस्प विशिष्टताएँ == | == लिस्प विशिष्टताएँ == | ||
=== कार्यान्वयन === | === कार्यान्वयन === | ||
न्यूनतम परिभाषा | न्यूनतम परिभाषा है। <syntaxhighlight lang="Scheme"> | ||
(define (REPL env) | (define (REPL env) | ||
(print (eval env (read))) | (print (eval env (read))) | ||
Line 48: | Line 48: | ||
* इनपुट और आउटपुट का इतिहास। | * इनपुट और आउटपुट का इतिहास। | ||
* इनपुट अभिव्यक्तियों और परिणामों के लिए चर सेट किए गए हैं। ये चर आरईपीएल में भी उपलब्ध हैं। उदाहरण के लिए कॉमन लिस्प में <code>*</code> अंतिम परिणाम को संदर्भित करता है, <code>**</code> और <code>***</code> उससे पहले के नतीजों के लिए. | * इनपुट अभिव्यक्तियों और परिणामों के लिए चर सेट किए गए हैं। ये चर आरईपीएल में भी उपलब्ध हैं। उदाहरण के लिए कॉमन लिस्प में <code>*</code> अंतिम परिणाम को संदर्भित करता है, <code>**</code> और <code>***</code> उससे पहले के नतीजों के लिए. | ||
* आरईपीएल के स्तर। कई लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के समय कोई त्रुटि होती है, तो | * आरईपीएल के स्तर। कई लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के समय कोई त्रुटि होती है, तो प्रणाली को त्रुटि संदेश के साथ शीर्ष स्तर पर वापस नहीं भेजा जाता है। इसके अतिरिक्त त्रुटि संदर्भ में नया आरईपीएल, स्तर गहरा, प्रारंभ किया गया है। उपयोगकर्ता तब समस्या का निरीक्षण कर सकता है, उसे ठीक कर सकता है और जारी रख सकता है - यदि संभव हो तो। यदि ऐसे डिबग आरईपीएल में कोई त्रुटि होती है, तो और आरईपीएल, फिर से स्तर गहरा, प्रारंभ किया जाता है। अधिकांशतः आरईपीएल विशेष डिबग कमांड प्रदान करता है। | ||
* [[त्रुटि प्रबंधन]]। आरईपीएल पुनरारंभ प्रदान करता है। जब कोई त्रुटि होती है, तो निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है। | * [[त्रुटि प्रबंधन]]। आरईपीएल पुनरारंभ प्रदान करता है। जब कोई त्रुटि होती है, तो निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है। | ||
* [[माउस (कंप्यूटिंग)]] डेटा ऑब्जेक्ट के संवेदनशील इनपुट और आउटपुट। | * [[माउस (कंप्यूटिंग)]] डेटा ऑब्जेक्ट के संवेदनशील इनपुट और आउटपुट। | ||
Line 66: | Line 66: | ||
== बाहरी संबंध == | == बाहरी संबंध == | ||
* [[Paul Graham (programmer)|Paul Graham]] has written a [http://www.paulgraham.com/rootsoflisp.html description of a | * [[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- | * 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: कमान के गोले]] [[Category: लिस्प (प्रोग्रामिंग भाषा)]] [[Category: दुभाषिए (कंप्यूटिंग)]] [[Category: यूजर इंटरफ़ेस तकनीक]] |
Revision as of 23:00, 30 June 2023
रीड-इवल-प्रिंट लूप (आरईपीएल), जिसे परस्पर संवादात्मक टॉपलेवल या लैंग्वेज शेल भी कहा जाता है, जिससे कि सरल परस्पर संवादात्मक कंप्यूटर प्रोग्रामिंग वातावरण होता है, जो एकल उपयोगकर्ता इनपुट लेता है, अतः उन्हें निष्पादित करता है और उपयोगकर्ता को परिणाम लौटाता है। इस प्रकार आरईपीएल वातावरण में लिखे गए प्रोग्राम को टुकड़ों में निष्पादित किया जाता है।[1] यह शब्द सामान्यतः क्लासिक लिस्प मशीन परस्पर संवादात्मक वातावरण के समान प्रोग्रामिंग अंतःक्रिया को संदर्भित करता है। सामान्य उदाहरणों में कमांड-लाइन शेल (कंप्यूटिंग) और प्रोग्रामिंग भाषाओं के लिए समान वातावरण सम्मिलित होते हैं और तकनीक स्क्रिप्टिंग भाषाओं की अधिक विशेषता होती है।[2]
इतिहास
सन्न 1964 में, पीडीपी-1 पर लिस्प (प्रोग्रामिंग भाषा) के कार्यान्वयन के लिए एल. पीटर ड्यूश और एडमंड बर्कले द्वारा रीड-ईवल-प्रिंट चक्र अभिव्यक्ति का उपयोग किया गया था।[3]
कम से कम सन्न 1980 के दशक से, संक्षिप्त रूप आरईपी लूप और आरईपीएल को स्कीम (प्रोग्रामिंग भाषा) के संदर्भ में प्रमाणित किया गया है।[4][5]
सिंहावलोकन
आरईपीएल में, उपयोगकर्ता अधिक अभिव्यक्तियाँ अंकित करता है (संपूर्ण अनुवाद इकाई (प्रोग्रामिंग) के अतिरिक्त) और आरईपीएल उनका मूल्यांकन करता है और परिणाम प्रदर्शित करता है।[1] रीड-इवल-प्रिंट लूप नाम लिस्प आदिम कार्यों के नाम से आया है जो इस कार्यक्षमता को क्रियान्वित करते हैं।
- फलन पढ़ना उपयोगकर्ता से अभिव्यक्ति स्वीकार करता है और इसे मेमोरी में डेटा संरचना में पदच्छेद करता है। उदाहरण के लिए, उपयोगकर्ता एस-अभिव्यक्ति
(+ 1 2 3)
अंकित कर सकता है, जिसे चार डेटा तत्वों वाली लिंक्ड सूची में पार्स किया गया है। - eval फलन इस आंतरिक डेटा संरचना को लेता है और इसका मूल्यांकन करता है। इस प्रकार लिस्प में, किसी फलन के नाम से प्रारंभ होने वाले एस-एक्सप्रेशन का मूल्यांकन करने का अर्थ यह है कि उस फलन को उन तर्कों पर कॉल किया जाता है, जो अभिव्यक्ति के बाकी भागों को बनाते हैं। तब फलन
+
को तर्क1 2 3
पर कॉल किया जाता है, जिससे परिणाम6
मिलता है। - प्रिंट फलन eval द्वारा प्राप्त परिणाम लेता है और इसे उपयोगकर्ता को प्रिंट करता है। यदि यह जटिल अभिव्यक्ति है, तब इसे समझना सरल बनाने के लिए इसे सुंदर रूप से मुद्रित किया जा सकता है।
विकास का वातावरण फिर पढ़ने की स्थिति में लौट आता है और लूप बनाता है, जो प्रोग्राम बंद होने पर समाप्त हो जाता है।
आरईपीएल खोजपूर्ण प्रोग्रामिंग और डिबगिंग की सुविधा प्रदान करते हैं जिससे कि प्रोग्रामर अगले पढ़ने के लिए कौन सी अभिव्यक्ति प्रदान करनी है यह तय करने से पहले मुद्रित परिणाम का निरीक्षण कर सकता है। इस प्रकार रीड-इवल-प्रिंट लूप में प्रोग्रामर को क्लासिक एडिट-कंपाइल-रन-डीबग चक्र की तुलना में अधिक बार सम्मिलित किया जाता है।
जिससे कि प्रिंट फलन उसी पाठ्य प्रारूप में आउटपुट करता है, जिसे रीड फलन इनपुट के लिए उपयोग करता है, अतः अधिकांश परिणाम ऐसे रूप में मुद्रित होते हैं जिन्हें कॉपी किया जा सकता है और आरईपीएल में वापस चिपकाया जा सकता है। चूँकि, कभी-कभी उन तत्वों के अभ्यावेदन को मुद्रित करना आवश्यक होता है जिन्हें समझदारी से वापस नहीं पढ़ा जा सकता है। जैसे उदाहरण के लिए, सॉकेट हैंडल या जटिल वर्ग इत्यादि। इन स्थितियों में, अपठनीय वस्तुओं के लिए वाक्यविन्यास उपस्तिथ होते है। यह पायथन में, <__module__.class instance>
अंकन और सामान्य लिस्प में, <व्हाटएवर>
प्रपत्र होता है। इस प्रकार कलीम, स्लिम और प्रतीकात्मकता लिस्प मशीन का आरईपीएल अपठनीय वस्तुओं को भी पढ़ सकता है। वह प्रत्येक आउटपुट के लिए रिकॉर्ड करते हैं कि कौन सा ऑब्जेक्ट मुद्रित किया गया था। जिसे बाद में जब कोड को वापस पढ़ा जाता है, तब ऑब्जेक्ट को मुद्रित आउटपुट से पुनर्प्राप्त किया जाता है।
किसी भी पाठ-आधारित भाषा का समर्थन करने के लिए आरईपीएलएस बनाए जा सकते हैं। इस प्रकार संकलित भाषाओं के लिए आरईपीएल समर्थन सामान्यतः वास्तविक मशीन के शीर्ष पर दुभाषिया (कंप्यूटिंग) को क्रियान्वित करके प्राप्त किया जाता है, जो कंपाइलर को अंतःक्रिया प्रदान करता है। उदाहरण के लिए, जेडीके 9 से प्रारंभ करके, जावा (प्रोग्रामिंग भाषा) में जेशेल को भाषा में कमांड-लाइन अंतःक्रिया के रूप में सम्मिलित किया गया है। अतः विभिन्न अन्य भाषाओं में डाउनलोड के लिए तृतीय-पक्ष उपकरण उपलब्ध होता हैं जो भाषा के साथ समान शेल इंटरैक्शन प्रदान करते हैं।
उपयोग
सामान्यतः शेल (कंप्यूटिंग) के रूप में, आरईपीएल वातावरण उपयोगकर्ताओं को प्रोग्रामिंग क्षमताओं तक पहुंच प्रदान करने के अतिरिक्त ऑपरेटिंग प्रणाली की प्रासंगिक सुविधाओं तक पहुंचने की अनुमति देता है। इस प्रकार ऑपरेटिंग प्रणाली शेल के बाहर आरईपीएल का सबसे सामान्य उपयोग परस्पर संवादात्मक सॉफ़्टवेयर प्रोटोटाइप के लिए होता है।[6] अतः अन्य उपयोगों में गणितीय गणना, वैज्ञानिक विश्लेषण को एकीकृत करने वाले दस्तावेज़ बनाना (जैसे आईपीथॉन), परस्पर संवादात्मक सॉफ़्टवेयर रखरखाव, बेंच मार्किंग और एल्गोरिदम अन्वेषण सम्मिलित होते हैं।
लिस्प विशिष्टताएँ
कार्यान्वयन
न्यूनतम परिभाषा है।
(define (REPL env)
(print (eval env (read)))
(REPL env) )
कहाँ env
प्रारंभिक का प्रतिनिधित्व करता है eval
-उत्साह का माहौल. ऐसा भी माना जाता है env
द्वारा विनाशकारी रूप से अद्यतन किया जा सकता है eval
.
कार्यक्षमता
लिस्प आरईपीएल द्वारा प्रदान की जाने वाली विशिष्ट कार्यक्षमता में सम्मिलित हैं:
- इनपुट और आउटपुट का इतिहास।
- इनपुट अभिव्यक्तियों और परिणामों के लिए चर सेट किए गए हैं। ये चर आरईपीएल में भी उपलब्ध हैं। उदाहरण के लिए कॉमन लिस्प में
*
अंतिम परिणाम को संदर्भित करता है,**
और***
उससे पहले के नतीजों के लिए. - आरईपीएल के स्तर। कई लिस्प प्रणालियों में यदि किसी अभिव्यक्ति के पढ़ने, मूल्यांकन या मुद्रण के समय कोई त्रुटि होती है, तो प्रणाली को त्रुटि संदेश के साथ शीर्ष स्तर पर वापस नहीं भेजा जाता है। इसके अतिरिक्त त्रुटि संदर्भ में नया आरईपीएल, स्तर गहरा, प्रारंभ किया गया है। उपयोगकर्ता तब समस्या का निरीक्षण कर सकता है, उसे ठीक कर सकता है और जारी रख सकता है - यदि संभव हो तो। यदि ऐसे डिबग आरईपीएल में कोई त्रुटि होती है, तो और आरईपीएल, फिर से स्तर गहरा, प्रारंभ किया जाता है। अधिकांशतः आरईपीएल विशेष डिबग कमांड प्रदान करता है।
- त्रुटि प्रबंधन। आरईपीएल पुनरारंभ प्रदान करता है। जब कोई त्रुटि होती है, तो निश्चित आरईपीएल स्तर पर वापस जाने के लिए इन पुनरारंभ का उपयोग किया जा सकता है।
- माउस (कंप्यूटिंग) डेटा ऑब्जेक्ट के संवेदनशील इनपुट और आउटपुट।
- प्रतीकों, पथनामों, वर्ग नामों और अन्य वस्तुओं पर इनपुट संपादन और संदर्भ विशिष्ट पूर्णता।
- आदेशों के लिए सहायता और दस्तावेज़ीकरण।
- पाठक को नियंत्रित करने के लिए चर (प्रोग्रामिंग)। उदाहरण के लिए, चर *रीड-बेस* नियंत्रित करता है जिसमें आधार संख्याएँ डिफ़ॉल्ट रूप से पढ़ी जाती हैं।
- प्रिंटर को नियंत्रित करने के लिए चर। उदाहरण: मुद्रित करने के लिए भावों की अधिकतम लंबाई या अधिकतम गहराई।
- अतिरिक्त कमांड सिंटैक्स. कुछ आरईपीएल में ऐसे कमांड होते हैं जो एस-एक्सप्रेशन सिंटैक्स का पालन नहीं करते हैं, किन्तु अधिकांशतः तर्क के रूप में लिस्प डेटा के साथ काम करते हैं।
- ग्राफिकल उत्तर। कुछ लिस्प आरईपीएल (सीएलआईएम श्रोता उदाहरण है) ग्राफिकल इनपुट और आउटपुट भी स्वीकार करते हैं।
यह भी देखें
संदर्भ
- ↑ 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.
- ↑ 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) - ↑ L. Peter Deutsch; Edmund Berkeley, The LISP Implementation for the PDP-1 Computer (PDF), p. 15
- ↑ Smith, Jerry D. (1988). योजना का परिचय. Englewood Cliffs, N.J. : Prentice Hall. p. 8. ISBN 978-0-13-496712-7.
- ↑ Hanson, Chris (1986). "rep.scm -- Initial 1986 revision of MIT-Scheme". GitHub. Retrieved 11 June 2023.
- ↑ 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.
बाहरी संबंध
- Paul Graham has written a description of a आरईपीएल implementation in Common Lisp.
- Joël Franusic Online-REPs-and-आरईपीएलs list