Цикл чтения – оценки – печати - Read–eval–print loop

А цикл чтения – оценки – печати (REPL), также называемый интерактивный верхний уровень или языковая оболочка, это простой интерактивный компьютерное программирование среда, которая принимает вводимые пользователем данные, выполняет их и возвращает результат пользователю; программа, написанная в среде REPL, выполняется кусочно. Этот термин обычно используется для обозначения интерфейсов программирования, подобных классическим. Лисп-машина интерактивная среда. Общие примеры включают командная строка снаряды и аналогичные среды для языки программирования, и техника очень характерна для языки сценариев.[1]

Обзор

В REPL пользователь вводит одно или несколько выражений (а не весь блок компиляции ), а REPL оценивает их и отображает результаты. Название цикл чтения – оценки – печати происходит от имен примитивных функций Lisp, которые реализуют эту функциональность:

  • В читать функция принимает выражение от пользователя, и разбирает это в структуру данных в памяти. Например, пользователь может ввести s-выражение (+ 1 2 3), который разбирается в связанный список содержащий четыре элемента данных.
  • В оценка функция берет эту внутреннюю структуру данных и оценивает ее. В Лиспе вычисление s-выражения, начинающегося с имени функции, означает вызов этой функции для аргументов, составляющих остальную часть выражения. Итак, функция + вызывается по аргументам 1 2 3, давая результат 6.
  • В Распечатать функция принимает результат, полученный оценка, и распечатывает его пользователю. Если это сложное выражение, оно может быть красиво напечатанный чтобы было легче понять.

Затем среда разработки возвращается в состояние чтения, создавая цикл, который завершается при закрытии программы.

REPL упрощают исследовательское программирование и отладка потому что программист может проверить напечатанный результат, прежде чем решить, какое выражение предоставить для следующего чтения. Цикл чтения-оценки-печати задействует программиста чаще, чем классический цикл редактирование-компиляция-запуск-отладка.

Поскольку Распечатать функция выводит в том же текстовом формате, что и читать функция используется для ввода, большинство результатов печатаются в форме, которую можно скопировать и вставить обратно в REPL. Однако иногда необходимо распечатать представления элементов, которые не могут быть разумно прочитаны, например дескриптор сокета или сложный экземпляр класса. В этих случаях должен существовать синтаксис для нечитаемых объектов. В Python это <__module__.class instance> обозначение, а в Common Lisp # <что угодно> форма. REPL CLIM, СЛИЗЬ, а Символика Лисп-машина также может читать нечитаемые объекты. Они записывают для каждого вывода, какой объект был напечатан. Позже, когда код будет считан обратно, объект будет извлечен из распечатанного вывода.

REPL могут быть созданы для поддержки любого текстового языка. Поддержка REPL для скомпилированных языков обычно достигается за счет реализации интерпретатора поверх виртуальной машины, которая предоставляет интерфейс для компилятора. Например, начиная с JDK 9, Ява включены JShell как интерфейс командной строки к языку. Для других языков доступны для загрузки сторонние инструменты, которые обеспечивают аналогичное взаимодействие оболочки с языком.

Использует

Как ракушка среда REPL позволяет пользователям получать доступ к соответствующим функциям операционной системы в дополнение к предоставлению доступа к возможностям программирования. Чаще всего REPL используются вне оболочек операционной системы для мгновенного прототипирование. Другие варианты использования включают математические вычисления, создание документов, которые объединяют научный анализ (например, IPython ), интерактивное сопровождение программного обеспечения, сравнительный анализ, и алгоритм исследования.

Специфика Лиспа

Выполнение

Минимальное определение:

(определить (REPL env)  (Распечатать (оценка env (читать)))  (REPL env) )

куда env представляет собой начальный оценка-оценка окружающей среды. Также предполагается, что env могут быть деструктивно обновлены оценка.

Функциональность

Типичная функциональность, предоставляемая Lisp REPL, включает:

  • История входов и выходов.
  • Переменные устанавливаются для входных выражений и результатов. Эти переменные также доступны в REPL. Например, в Common Lisp * относится к последнему результату, ** и *** - к результатам перед ним.
  • Уровни REPL. Во многих системах Lisp, если во время чтения, оценки или печати выражения возникает ошибка, система не возвращается на верхний уровень с сообщением об ошибке. Вместо этого в контексте ошибки запускается новый REPL, на один уровень глубже. Затем пользователь может изучить проблему, исправить ее и продолжить - если возможно. Если в таком отладочном REPL возникает ошибка, запускается другой REPL, снова на более глубокий уровень. Часто REPL предлагает специальные команды отладки.
  • Обработка ошибок. REPL обеспечивает перезапуск. Эти перезапуски можно использовать при возникновении ошибки для возврата к определенному уровню REPL.
  • Мышь чувствительный ввод и вывод объектов данных.
  • Редактирование ввода и зависящее от контекста завершение символов, путей, имен классов и других объектов.
  • Справка и документация по командам.
  • Переменные контролировать читателя. Например, переменная * read-base * определяет, в каких базовых числах читаются по умолчанию.
  • Переменные для управления принтером. Пример: максимальная длина или максимальная глубина печатаемых выражений.
  • Дополнительный синтаксис команды. В некоторых REPL есть команды, которые не следуют синтаксису s-выражений, но часто работают с данными Lisp в качестве аргументов.
  • Графические REPL. Некоторые реплики Lisp (например, прослушиватель CLIM) принимают также графический ввод и вывод.

Смотрите также

Рекомендации

  1. ^ Привет, Тони! Папай, Гьюри (2014). Вычислительная вселенная: путешествие через революцию. Издательство Кембриджского университета. п.76. ISBN  978-1-31612322-5, "Основной характеристикой современных языков сценариев является их интерактивность, которую иногда называют REPL среда программирования. ... Характеристики простоты использования и немедленного выполнения в среде REPL иногда принимаются за определение языка сценариев ".

внешняя ссылка