Компиляторы и интерпретаторы
С помощью языка программирования создается не готовая программа, а только ее текст, описывающий ранее разработанный алгоритм. Чтобы получить работающую программу, надо этот текст перевести в машинный код и использовать отдельно от исходного текста, либо сразу выполнять команды языка, указанные в тексте программы. первая задача выполняется компилятором, вторая – интерпретатором.
Интерпретатор моделирует виртуальную вычислительную машину, для которой базовыми инструкциями служат не элементарные команды процессора, а операторы языка программирования. В процессе выполнения программы он считывает очередную команду программы, анализирует ее структуру и сразу исполняет. После того, как текущая команда успешно выполнена, интерпретатор переходит к следующей и т.д. При этом если одна и та же команда выполняется в программе многократно, интерпретатор будет выполнять ее так, как будто встретил впервые. Вследствие этого программы, в которых требуется осуществить большой объём вычислений, выполняются медленно. Кроме того, для выполнения программы на компьютере должен иметься сам интерпретатор.
Компиляторы полностью обрабатывают исходный код программы. Они просматривают его в поиске синтаксических ошибок, производят определенный смысловой анализ, а затем автоматически переводят (транслируют) на машинный язык. Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы (например, с помощью инструкций, ориентированных на конкретный процессор, путём исключения ненужных команд, промежуточных вычислений и т.д.). В результате приложение получается законченным и эффективным. Такая программа работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора, а также может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код, при этом наличие компилятора или интерпретатора на них не требуется.
Недостаток компилятора – трудоёмкость трансляции языков программирования, ориентированных на обработку данных сложных структур, часто заранее неизвестной или динамически меняющейся во время работы программы. Тогда в машинный код приходиться вставлять множество дополнительных проверок, анализировать наличие ресурсов операционной системы, динамически их захватывать и освобождать, формировать и обрабатывать в памяти компьютера сложные объекты, что на уровне жестко заданных машинных инструкций осуществить довольно трудно, а для задачи почти невозможно.
С помощью интерпретатора, наоборот, допустимо в любой момент остановить программу, исследовать содержимое памяти, организовать диалог с пользователем, выполнить сколь угодно сложные преобразования и при этом постоянно контролировать состояние окружающей программно-аппаратной среды, благодаря чему достигается высокая надёжность работы. Интерпретатор при выполнении каждого оператора проверяет множество характеристик операционной системы и при необходимости максимально подробно информирует разработчика о возникающих проблемах. Кроме того, интерпретатор очень удобен для использования в качестве инструмента изучения программирования, так как позволяет понять принципы работы любого отдельного оператора языка.
В реальных системах программирования перемешаны технологии и компиляции, и интерпретации. В процессе отладки программа может выполняться по шагам, а результирующий код не обязательно будет машинным – он даже может быть исходным кодом, написанном на другом языке программирования (это существенно упрощает процесс трансляции, но требует компилятора для конкретного языка), или промежуточным машинно-независимым кодом абстрактного процессора, который в различных машинных архитектурах будет выполняться с помощью интерпретатора или компилироваться в соответствующий машинный код.
Дата добавления: 2019-10-16; просмотров: 751;