एक REPL और इंटरेक्टिव शेल के बीच अंतर


37

Noob सवाल। मैं विकिपीडिया पर परिभाषाओं को पढ़कर केवल एक REPL और एक इंटरैक्टिव शेल के बीच अंतर बताने में सक्षम नहीं हूं ।

विकी नोट करता है कि आरईपीएल एक विशेष प्रकार की इंटरैक्टिव भाषा शेल है। हालांकि यह एक उचित सबसेट है? विकी की परिभाषा शब्दावली REPL को लिस्प जैसी भाषाओं तक सीमित करने के लिए लगती है, जबकि कथित गुणों में वास्तव में कोई विशिष्ट विशेषताएं नहीं होती हैं।

विशेष रूप से, क्या IPython को REPL कहना सही होगा?

जवाबों:


24

REPL: यह एक ऐसी प्रक्रिया है जो सिर्फ लूप करती है, एक समय में एक कमांड को स्वीकार करती है, इसे निष्पादित करती है, और परिणाम को प्रिंट करती है।

लूप के प्रत्येक पुनरावृत्ति पर तीन चरण हैं:

  1. वर्णों को पढ़ने के लिए कॉलिंग जो कीबोर्ड इनपुट बफर से एक शाब्दिक अभिव्यक्ति बनाते हैं, और इसका प्रतिनिधित्व करने के लिए एक डेटा संरचना का निर्माण करते हैं,
  2. अभिव्यक्ति का मूल्यांकन करने के लिए eval को बुलाते हुए - सहज रूप से, eval "आंकड़े का अर्थ है कि अभिव्यक्ति का क्या अर्थ है," और "यह वही करता है जो करने के लिए कहता है," अभिव्यक्ति का मूल्य लौटाता है - और
  3. ईवैल से परिणामी का एक पाठीय प्रतिनिधित्व छापने के लिए लेखन को कॉल करना, ताकि उपयोगकर्ता इसे देख सके।

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

यहाँ एक बहुत ही सरल रीड-इवल-प्रिंट लूप है:

  (define (rep-loop)
  (display "repl>")      ; print a prompt
  (write (eval (read)))  ; read expr., pass to eval, write result
  (rep-loop))            ; loop (tail-recursive call) to do it again

ध्यान दें कि अभिव्यक्ति (लिखना (पढ़ना (पढ़ना))) चीजों को उचित रीड-इवल-प्रिंट ऑर्डर में करती है, क्योंकि प्रत्येक प्रक्रिया कॉल का तर्क वास्तविक कॉल से पहले गणना की जाती है।

इंटरएक्टिव शेल: एक इंटरैक्टिव शेल एक टर्मिनल पर उपयोगकर्ता इनपुट से कमांड पढ़ता है। अन्य बातों के अलावा, ऐसा शेल सक्रियण पर स्टार्टअप फ़ाइलों को पढ़ता है, एक शीघ्रता प्रदर्शित करता है, और डिफ़ॉल्ट रूप से नौकरी नियंत्रण को सक्षम करता है। उपयोगकर्ता शेल के साथ इंटरैक्ट कर सकता है। इंटरेक्टिव शेल नाम कैसे आया है। आइए इस बैश स्क्रिप्ट पर विचार करें:

     #!/bin/bash
     echo -n "Enter the value of variable 'var1': "
     read var1
     echo "var1 = $var1"
     echo

    echo -n "Enter the values of variables 'var2' and 'var3' "
    echo =n "(separated by a space or tab): "
    read var2 var3
    echo "var2 = $var2      var3 = $var3"
    #  If you input only one value,
    #+ the other variable(s) will remain unset (null).

    exit 0

अब ऊपर की स्क्रिप्ट उपयोगकर्ता के साथ बातचीत करती है, यह उपयोगकर्ता को इनपुट्स दर्ज करने के लिए कहती है जिसके आधार पर वह अपनी गणना करता है। इसलिए यह एक इंटरैक्टिव शेल की तरह व्यवहार करता है।

सिमिलरी, पाइथन इंटरप्रेटर जिसका उपयोग ज्यादातर लोग अजगर को सीखने के लिए करते हैं, यह एक इंटरैक्टिव है क्योंकि यह अपने उपयोगकर्ता के साथ संचार करता है।


1
@ द डार्क नाइट: तो उपरोक्त सिद्धांत के आधार पर, क्या हम कह सकते हैं कि डेवलपर टूलबार (क्रोम में) या फ़ायरबग एक्सटेंशन (फ़ायरफ़ॉक्स में) थोड़े REPL है?
राजकिशोर

9

तकनीकी रूप से, यह कहना सही है कि एक शेल एक REPL का एक उदाहरण है। हालाँकि, यह प्रोग्राम परिभाषा की बात नहीं है क्योंकि यह सामान्य उपयोग परिदृश्यों में से एक है।

उदाहरण के लिए, बैश, सी में लिखा गया है, लेकिन यह अच्छी तरह से पायथन में लिखा जा सकता था। उस समय, यदि आप कार्यक्रम की विशेषताओं और क्षमताओं के बारे में बात करते हैं, तो क्या यह कहना सही होगा कि बैश एक शेल है जबकि पायथन नहीं है?

आप यह भी कह सकते हैं कि शेल कमांड चलाने के बारे में हैं जबकि आरईपीएल निर्देश और फ़ंक्शन कॉल चलाने के बारे में हैं। लेकिन क्या आप REPLs (Python's os.system, os.popen, आदि) में कमांड नहीं चला सकते हैं, और क्या आप इसके बिल्ट-इन का उपयोग करके, बैश में फ़ंक्शंस (या परिभाषित) नहीं चला सकते?

जैसा कि पूर्वोक्त है, यह उपयोग की बात है। यदि आप फ़ाइलों और रेडीमेड कार्यक्रमों को टालते हैं, तो आप इसे शेल के रूप में उपयोग कर रहे हैं। यदि आप पुस्तकालयों या भाषा शब्दार्थों का परीक्षण कर रहे हैं, तो यह एक REPL है।

उम्मीद है की वो मदद करदे।


3

यह StackOverflow प्रश्न चर्चा करता है कि बहुत प्रश्न (अन्य चीजों के बीच)।

मैं व्यक्तिगत रूप से बाड़ पर हूं, जैसा कि इंटरैक्टिव पाइथन का संबंध है। लेकिन, अगर आप इसे एक REPL कॉल करना चाहते हैं, तो मुझे नहीं लगता कि कोई भी आपसे नाराज होगा (स्रोत कोड फ़ाइलों में काम करने वाली कुछ चीजें बहुत अधिक हैं, लेकिन कॉल के साथ पूरी तरह से खुश होने के लिए मेरे लिए इंटरैक्टिव शेल में नहीं। यह एक REPL) है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.