Интерпретатор
- 1 year ago
- 0
- 0
Интерпрета́тор ( англ. interpreter ıntə:'prıtə , от лат. interpretator — толкователь ) — программа (разновидность транслятора ), выполняющая интерпретацию .
Интерпрета́ция — построчный анализ, обработка и выполнение исходного кода программы или запроса, в отличие от компиляции , где весь текст программы перед запуском анализируется и транслируется в машинный или байт-код без её выполнения .
Первым интерпретируемым
языком программирования
высокого уровня был
Lisp
. Его интерпретатор был создан в
1958 году
на компьютере
IBM 704
. Рассел вдохновился работой
Джона Маккарти
и выяснил, что функция
eval
в Lisp может быть встроена в машинный код
.
Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно или построчно по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды или строки с ошибкой.
Интерпретатор компилирующего типа — это система из компилятора , переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код , и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина ). Достоинством таких систем является большее быстродействие выполнения программ за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе. Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как Java , PHP , Tcl , Perl , REXX (сохраняется результат парсинга исходного кода ), а также в различных СУБД .
В случае разделения интерпретатора компилирующего типа на компоненты получаются компилятор языка и простой интерпретатор с минимизированным анализом исходного кода. Причём исходный код для такого интерпретатора не обязательно должен иметь текстовый формат или быть байт-кодом, который понимает только данный интерпретатор, это может быть машинный код какой-то существующей аппаратной платформы. К примеру, виртуальные машины вроде QEMU , Bochs , VMware включают в себя интерпретаторы машинного кода процессоров семейства x86 .
Некоторые интерпретаторы (например, для языков Лисп , Scheme , Python , Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати ( англ. read-eval-print loop, REPL ). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Лисп), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.
Уникальным является язык Forth , который способен работать как в режиме интерпретации, так и компиляции входных данных, позволяя переключаться между этими режимами в произвольный момент, как во время трансляции исходного кода, так и во время работы программ.
Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении . Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм , а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6 ), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).