Как работает интерпретатор / компилятор


Как работает интерпретатор / компилятор? В чем разница между интерпретатором и компилятором.

9 64

9 ответов:

Сост

компиляторы были первым видом программа-переводчик для написания. Этот идея проста: вы пишете программу, затем передайте его компилятору, который перевести его. Затем вы запускаете результат.

переводчики

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

компилятора характеристики:

  • тратит много времени на анализ и обработка программы
  • результирующий исполняемый файл имеет некоторую форму машины - определенный двоичный код
  • в компьютерное оборудование интерпретирует (выполняет) полученный код
  • выполнение программы быстро

переводчик характеристики:

  • относительно мало времени тратится анализ и обработка программы
  • полученный код является своего рода промежуточный код
  • полученный код интерпретируется еще одна программа
  • выполнение программы происходит относительно медленно

что такое переводчик?

An S -> T переводчик принимает код, выраженный на исходном языке S, и переводит его в эквивалентный код, выраженный на другом (целевом) языке T.

примеры переводчики:

  • компиляторы-переводит код высокого уровня в код низкого уровня, например Java - > JVM
  • ассемблеры-переводит код языка ассемблера на машинный код, например x86as - > x86
  • переводчики высокого уровня-переводит код с одного PL на другой, например Java - > C
  • декомпиляторы-переводит низкоуровневый код в высокоуровневый, например байт-код Java JVM - > Java

что такое переводчик?

An переводчик с принимает код, выраженный на языке S, и немедленно выполняет этот код. Он работает путем выборки, анализа и выполнения одной инструкции за раз.

отлично, когда пользователь вводит инструкции в интерактивном режиме (думаю, Python) и хотел бы получить результат, прежде чем вводить следующую инструкцию. Также полезно, когда программа должна быть выполнена только один раз или требует, чтобы быть портативным.

  • интерпретация программы намного медленнее, чем выполнение собственного машинного кода
  • интерпретация языка высокого уровня составляет ~100 раз медленнее
  • интерпретация языка среднего уровня (например, байт-код JVM) ~10 медленнее
  • если инструкция вызывается повторно, она будет проанализирована повторно - отнимает много времени!
  • нет необходимости компилировать код

различия

поведение

  • компилятор переводит исходный код в машинный код, но не выполняет источник или объект код.

  • интерпретатор выполняет исходный код по одной инструкции за раз, но не переводит исходный код.

производительность

  • компилятор занимает довольно много времени, чтобы перевести исходную программу в машинный код, но последующее выполнение происходит быстро
  • интерпретатор начинает выполнять исходную программу немедленно, но выполнение медленно

интерпретирующие компиляторы

интерпретирующий компилятор является хорошим компромиссом между компиляторами и интерпретаторами. Он переводит исходную программу в код виртуальной машины, который затем интерпретируется.

интерпретирующий компилятор сочетает быстрый перевод с умеренно быстрым выполнением, при условии, что:

  • код виртуальной машины ниже, чем исходный язык, но выше, чем собственный машинный код
  • VM инструкции имеют простые форматы (могут быть быстро проанализированы интерпретатором)

пример: JDK предоставляет интерпретирующий компилятор для Java.

компилятор, преобразует исходный код на одном языке программирования в другой.

переводчик, выполняет исходный код напрямую (обычно внутри собственной виртуальной машины).

alt текст http://content.answers.com/main/content/img/CDE/COMPILE.GIF

Как правило, интерпретатор является дорогостоящим.

в чем разница между интерпретатором и компилятором?

enter image description here

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

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

Как работа интерпретатора / компилятора?

enter image description here

  • в отличие от компилируемых языков, которые переводятся на машинный язык раньше времени (справа).
  • интерпретируемые языки переводятся во время выполнения.
  • dBASE и BASIC переводчики (середина) перевести исходный код.
  • Java и Visual Basic (слева)переводчики перевести код, который является промежуточным языком, скомпилированным из оригинала исходный код.

источник

разница против того, как они работают

Q:для чего используются компиляторы и интерпретаторы ?

A: большинство программ написаны на языках высокого уровня (c#,java...). Языки высокого уровня содержат понятные слова и фразы. С другой стороны, компьютер (к тому времени, когда я написал эту статью) понимает машинный код, который является 0 и 1 только Ака двоичный/машинный код. Поэтому нам нужно преобразовать Высокоуровневый код в исходный код (машинный код/двоичный). Отсюда и слово преобразование.

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

но у обоих есть другой способ "перевода" кода отличия :

компилятор:

преобразует исходный код в какую-то промежуточную форму. Для статического языка компилятор обычно преобразует исходный код в сборку, которая обычно не сохраняется на диск, затем ассемблер вызывается для преобразования сборки в двоичный код, который обычно хранится в виде объектного файла(.О или .obj суффикс обычно), затем вызывается компоновщик для связывания объектных файлов с двоичным исполняемым файлом. Также принято называть весь этот процесс компиляции, сборки, связывания компиляцией. Таким образом, вы можете вызвать GCC компилятор, но на самом деле он вызывает cc1, который является компилятором для компиляции, как и ассемблер для сборки, ld, который является компоновщиком ссылка на сайт.

переводчики : язык, который имеет промежуточную так называемую форму байт-кода, исходный код сначала преобразуется в байт-код, этот процесс можно назвать компиляцией. Байт-код не может быть запущен на хост-машинах, ему нужна программа, которая на самом деле является процессом с точки зрения ОС, чтобы интерпретировать байт-код на хост-машине, эта программа называется интерпретатором, подумайте о java. Некоторые языки, такие как python, выполняют компиляцию и интерпретацию работы с a одиночный.

сравнение

переводчики

  • для анализа исходного кода требуется меньше времени, но общее время выполнения медленнее.
  • промежуточный объектный код не генерируется, следовательно, эффективным.
  • продолжает переводить программу до тех пор, пока не будет выполнена первая ошибка, в этом случае она останавливается. Следовательно, отладка простой.

Сост

  • для анализа исходного кода требуется большое количество времени, но общее время выполнения сравнительно быстрее.
  • генерирует промежуточный объектный код, который дополнительно требует связывания, следовательно, требует больше памяти.
  • он генерирует сообщение об ошибке только после сканирования всей программы. Следовательно отладка сравнительно трудна.

Примеры с Языки

понял

  • Python
  • Рубин
  • PHP
  • JAVA (Всемогущий)
  • Perl
  • R
  • Powershell

compiled

  • C
  • C++
  • C#
  • С
  • Свифт
  • Фортран

компилятор

переводчик - переводчика является компьютерная программа, которая выполняет инструкции, написанные на языке программирования. Он может либо выполнить исходный код напрямую, либо перевести исходный код на первом шаге в более эффективное представление и выполнить этот код

компиляторы-компилятор переводит исходный язык на целевой язык. Затем целевой язык принимает входные данные и выдает выходные данные.

компилятор создает целевой код путем компиляции исходного кода

затем целевой код затем принимает вход и дает выход

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

интерпретатор отображает ввод на вывод с помощью исходной программы

тогда целевая программа на машинном языке, создаваемая компилятором, намного быстрее интерпретатора при сопоставлении входных данных с выходными. Однако, поскольку интерпретатор выполняет исходную программу построчно, он дает лучшую диагностику ошибок, чем компилятор.

ссылка - компиляторы: принципы, методы и инструменты от Aho ака книга дракона

в чем разница между интерпретатором и компилятором.

положите его прямо и интуитивно,

компилятор, который преобразует исходный код в удобочитаемый machine codes который вычислитель может читать и выполнять;

интерпретатор-это тот, кто притворяется или имитирует компьютер для чтения и выполнения source code напрямую.

посмотреть PLAI книга, это лучшее введение в реализацию языка dymanic, которое я когда-либо находил:

языки программирования: применение и толкование (с) Шрирам Кришнамурти

эта книга посвящена написанию интерпретатора для динамического языка в схеме (dr. Racket), с его помощью вы можете написать свой собственный интерпретатор для любого языка и добавить несколько советов по ООП от

и SmallTalk и SOM: простой объект Машина:

все современные интерпретаторы включают компилятор внутри: compile highlevel elements на низкий уровень, но портативный байт-код, или использовать JIT для компиляции в машинный код в оперативную память.

PS: Если кто-то хочет написать систему SmallTalk на Python, пожалуйста, обратите внимание на меня.