Perbedaan antara REPL dan shell interaktif

37

Pertanyaan noob. Saya tidak bisa membedakan antara REPL dan shell interaktif hanya dengan membaca definisi di Wikipedia.

Wiki mencatat bahwa REPL adalah sejenis shell bahasa interaktif tertentu . Apakah itu bagian yang tepat? Definisi Wiki tampaknya membatasi terminologi REPL ke bahasa mirip Lisp, sedangkan properti yang disebutkan tidak benar-benar mengandung fitur pembeda.

Secara khusus, apakah benar untuk menyebut IPython REPL?

tchakravarty
sumber

Jawaban:

24

REPL: Ini adalah prosedur yang hanya memotong , menerima satu perintah pada satu waktu, menjalankannya, dan mencetak hasilnya.

Tiga langkah pada setiap iterasi loop adalah:

  1. Memanggil membaca untuk membaca karakter yang membentuk ekspresi tekstual dari buffer input keyboard, dan membuat struktur data untuk mewakilinya,
  2. Memanggil eval untuk mengevaluasi ekspresi - secara intuitif, eval "mengetahui apa arti ekspresi itu," dan "melakukan apa yang dikatakannya untuk dilakukan," mengembalikan nilai ekspresi - dan
  3. Memanggil menulis untuk mencetak representasi tekstual dari hasil eval, sehingga pengguna dapat melihatnya.

Anda bisa menulis loop read-eval-print Anda sendiri untuk program Anda sendiri, sehingga pengguna dapat mengetikkan ekspresi, dan Anda bisa menafsirkannya dengan cara apa pun yang Anda inginkan. Anda dapat memulai loop read-eval-print Anda (dengan mengetikkan (rep-loop)), dan itu akan mengambil alih dari loop read-eval-print Skema normal, menafsirkan ekspresi dengan cara Anda.

Inilah loop read-eval-print yang sangat sederhana:

  (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

Perhatikan bahwa ekspresi (write (eval (read))) melakukan hal-hal dalam urutan read-eval-print yang tepat, karena argumen untuk setiap panggilan prosedur dihitung sebelum panggilan yang sebenarnya.

Shell Interaktif: Shell interaktif membaca perintah dari input pengguna pada terminal. Antara lain, shell tersebut membaca file startup saat aktivasi, menampilkan prompt, dan memungkinkan kontrol pekerjaan secara default. Pengguna dapat berinteraksi dengan shell. Itulah bagaimana nama shell interaktif muncul. Mari kita perhatikan skrip bash ini:

     #!/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

Sekarang skrip di atas berinteraksi dengan pengguna, ia meminta pengguna untuk memasukkan input berdasarkan yang dilakukannya perhitungan. Itu sebabnya berperilaku seperti shell interaktif.

Sama halnya, interpreter python yang digunakan kebanyakan orang untuk mempelajari python adalah yang interaktif saat berkomunikasi dengan penggunanya.

Kesatria Kegelapan
sumber
1
@The Dark Knight: Jadi berdasarkan teori di atas, dapatkah kita mengatakan bahwa bilah alat pengembang (dalam chrome) atau ekstensi pembakar (dalam firefox) agak REPL?
Rajkishore
9

Secara teknis, benar untuk mengatakan bahwa shell adalah turunan dari REPL. Namun, ini bukan masalah definisi program karena merupakan salah satu skenario penggunaan umum.

Bash, misalnya, ditulis dalam bahasa C, tetapi bisa juga ditulis dengan Python. Pada titik itu, jika Anda berbicara tentang fitur dan kemampuan program, apakah benar untuk mengatakan bahwa Bash adalah shell sedangkan Python tidak?

Anda juga bisa mengatakan bahwa Shell adalah tentang menjalankan perintah sementara REPL adalah tentang menjalankan instruksi dan panggilan fungsi. Tetapi tidak bisakah Anda menjalankan perintah dalam REPLs (sistem Python, os.popen, dll), dan tidak bisakah Anda menjalankan (atau mendefinisikan) fungsi di Bash, menggunakan banyak dari bawaannya?

Seperti disebutkan di atas, ini masalah penggunaan. Jika Anda menyulap file dan program yang sudah jadi, Anda menggunakannya sebagai shell. Jika Anda menguji pustaka atau semantik bahasa, itu adalah REPL.

Semoga itu bisa membantu.

Yam Marcovic
sumber
3

Pertanyaan StackOverflow ini membahas pertanyaan itu (antara lain).

Saya pribadi di pagar sehubungan dengan Python interaktif. Tetapi, jika Anda ingin menyebutnya REPL, saya tidak berpikir ada orang yang akan marah kepada Anda (ada sedikit terlalu banyak hal yang berfungsi dalam file kode sumber, tetapi tidak dalam shell interaktif bagi saya untuk sepenuhnya senang dengan menelepon itu REPL).

Vatine
sumber