रीड-इवल-प्रिंट लूप

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

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

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


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

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

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

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

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

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

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

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


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

यह भी देखें

 * प्रत्यक्ष मोड

बाहरी संबंध

 * Paul Graham has written a description of a REPL implementation in Common Lisp.
 * Joël Franusic Online-REPs-and-REPLs list