REPL: Dies ist eine Prozedur, die nur eine Schleife durchläuft, jeweils einen Befehl annimmt, ihn ausführt und das Ergebnis druckt.
Die drei Schritte bei jeder Iteration der Schleife sind:
- Aufruf von read, um die Zeichen, die einen Textausdruck bilden, aus dem Tastatureingabepuffer zu lesen und eine Datenstruktur zu erstellen, um ihn darzustellen,
- Eval aufrufen, um den Ausdruck zu bewerten - intuitiv, eval "findet heraus, was der Ausdruck bedeutet" und "tut, was er zu tun sagt" und gibt den Wert des Ausdrucks zurück - und
- Durch Aufrufen von write wird eine Textdarstellung des Ergebnisses von eval gedruckt, damit der Benutzer es sehen kann.
Sie können eine eigene Lese-Auswertungs-Druck-Schleife für Ihre eigenen Programme schreiben, damit Benutzer Ausdrücke eingeben und sie nach Belieben interpretieren können. Sie können Ihre Read-Eval-Print-Schleife starten (durch Eingeben von (rep-loop)). Sie übernimmt die normale Schema-Read-Eval-Print-Schleife und interpretiert Ausdrücke auf Ihre Weise.
Hier ist eine sehr einfache Read-Eval-Print-Schleife:
(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
Beachten Sie, dass der Ausdruck (write (eval (read))) die Dinge in der richtigen Reihenfolge (read-eval-print) ausführt, da das Argument für jeden Prozeduraufruf vor dem tatsächlichen Aufruf berechnet wird.
Interaktive Shell: Eine interaktive Shell liest Befehle von Benutzereingaben auf einem Terminal. Unter anderem liest eine solche Shell beim Aktivieren Startdateien, zeigt eine Eingabeaufforderung an und aktiviert standardmäßig die Auftragssteuerung. Der Benutzer kann mit der Shell interagieren. So ist der Name der interaktiven Shell entstanden. Betrachten wir dieses Bash-Skript:
#!/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
Jetzt interagiert das obige Skript mit dem Benutzer und fordert den Benutzer auf, Eingaben zu machen, auf deren Grundlage er seine Berechnungen durchführt. Deshalb verhält es sich wie eine interaktive Shell.
Similary, der Python-Interpreter, mit dem die meisten Leute Python lernen, ist ein interaktiver Interpreter, der mit dem Benutzer kommuniziert.
Technisch ist es richtig zu sagen, dass eine Shell eine Instanz einer REPL ist. Es ist jedoch keine Frage der Programmdefinition, da es sich um ein häufiges Verwendungsszenario handelt.
Bash ist zum Beispiel in C geschrieben, könnte aber auch in Python geschrieben worden sein. Wenn Sie an diesem Punkt über Programmfunktionen und -fähigkeiten sprechen, wäre es dann richtig zu sagen, dass Bash eine Shell ist, Python jedoch nicht?
Sie können auch sagen, dass Shells Befehle ausführen, während REPLs Anweisungen und Funktionsaufrufe ausführen. Aber können Sie keine Befehle in REPLs (Pythons os.system, os.popen usw.) ausführen und können Sie keine Funktionen in Bash ausführen (oder definieren), indem Sie viele seiner eingebauten Funktionen verwenden?
Wie oben erwähnt, ist es eine Frage der Verwendung. Wenn Sie mit Dateien und vorgefertigten Programmen jonglieren, verwenden Sie sie als Shell. Wenn Sie Bibliotheken oder Sprachsemantik testen, handelt es sich um eine REPL.
Hoffentlich hilft das.
quelle
Diese StackOverflow- Frage behandelt genau diese Frage (unter anderem).
Ich bin persönlich in Bezug auf interaktives Python am Zaun. Aber, wenn Sie es als REPL bezeichnen möchten, wird niemand Ihnen böse sein (es gibt etwas zu viele Dinge, die in Quellcodedateien funktionieren, aber nicht in der interaktiven Shell, als dass ich mit dem Aufruf völlig zufrieden wäre es ist eine REPL).
quelle