Різниця між REPL та інтерактивною оболонкою


37

Питання Noob. Я не зовсім в змозі сказати різницю між REPL та інтерактивною оболонкою, лише прочитавши визначення у Вікіпедії.

Wiki зазначає, що REPL - це особливий тип інтерактивної мовної оболонки. Це правильне підмножина? Визначення Wiki, схоже, обмежує термінологію REPL лише мовами, що нагадують Lisp, тоді як заявлені властивості насправді не містять відмінних ознак.

Зокрема, чи було б правильно називати IPython REPL?

Відповіді:


24

REPL: Це процедура, яка просто циклічно, приймає по черзі одну команду, виконує її та друкує результат.

Три етапи при кожній ітерації циклу:

  1. Виклик прочитаного для читання символів, що складають текстовий вираз з буфера введення клавіатури, і побудова структури даних для його представлення,
  2. Виклик eval для оцінки виразу - інтуїтивно, eval "з'ясовує, що означає вираз", і "робить те, що він говорить, робити", повертаючи значення виразу - і
  3. Закликаючи написати, щоб надрукувати текстове зображення результату eval, щоб користувач міг бачити це.

Ви можете написати свій цикл для читання для друку для своїх програм, щоб користувачі могли вводити вирази, а ви можете їх інтерпретувати будь-яким чином. Ви можете запустити цикл read-eval-print (ввівши (rep-loop)), і він перейде від звичайної схеми циклу read-eval-print, інтерпретуючи вирази по-своєму.

Ось дуже простий цикл для читання-друку:

  (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

Зауважте, що вираз (write (eval (read))) виконує дії у відповідному порядку read-eval-print, оскільки аргумент для кожного виклику процедури обчислюється перед фактичним викликом.

Інтерактивна оболонка: інтерактивна оболонка зчитує команди з введення користувача на терміналі. Крім усього іншого, така оболонка зчитує файли запуску під час активації, відображає підказку та дозволяє керувати роботою за замовчуванням. Користувач може взаємодіяти з оболонкою. Так виникло ім'я інтерактивної оболонки. Розглянемо цей сценарій bash:

     #!/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
@ Темний лицар: Отже, виходячи з вищенаведеної теорії, чи можемо ми сказати, що панель інструментів для розробників (у хромі) або розширення firebug (у firefox) - це своєрідна відповідь?
Rajkishore

9

Технічно правильно сказати, що оболонка є екземпляром REPL. Однак це не питання визначення програми, оскільки це один із загальних сценаріїв використання.

Наприклад, Bash написаний на C, але це цілком могло бути написане на Python. Тоді, якщо говорити про функції та можливості програми, чи правильно було б сказати, що Bash - це оболонка, а Python - ні?

Ви також можете сказати, що оболонки стосуються виконання команд, а REPL - інструкцій із запуску та викликів функцій. Але ви не можете запускати команди в REPLs (os.system, Python, os.popen тощо), і ви не можете запускати (або визначати) функції в Bash, використовуючи багато своїх вбудованих?

Як зазначено вище, це питання використання. Якщо жонглювати файлами та готовими програмами, ви використовуєте його як оболонку. Якщо ви тестуєте бібліотеки або мовну семантику, це відповідь.

Сподіваюся, що це допомагає.


3

Це питання StackOverflow обговорює саме це питання (серед іншого).

Я особисто на огорожі щодо інтерактивного Python. Але, якщо ви хочете назвати це REPL, я не думаю, що хтось буде злий на вас (є трохи занадто багато речей, які працюють у файлах вихідного коду, але не в інтерактивній оболонці, щоб я був цілком задоволений викликом це відповідь).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.