Читать – eval– print loop

редактировать

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

Содержание

  • 1 Обзор
  • 2 Использование
  • 3 Специфика Lisp
    • 3.1 Реализация
    • 3.2 Функциональность
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Обзор

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

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

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

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

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

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

Использует

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

Специфика Lisp

Реализация

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

(define (REPL env) (print (eval env (read))) (REPL env))

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

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

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

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

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-03 09:53:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте