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

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

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

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

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


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

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

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

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

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

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

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

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


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

यह भी देखें

 * प्रत्यक्ष प्रणाली

बाहरी संबंध

 * Paul Graham has written a description of a आरईपीएल implementation in Common Lisp.
 * Joël Franusic Online-REPs-and-आरईपीएलs list