it-swarm.com.ru

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

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

65
developer

Компиляторы

Компиляторы были первым видом программы переводчика Идея проста: вы пишете программу, затем передайте его компилятору, который переводит это. Затем вы запускаете Результат.

Переводчики

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

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

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

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

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

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

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

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

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

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

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

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

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

Отличия

Поведение

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

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

Спектакль

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

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

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

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

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

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

30
martynas

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

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

альтернативный текст http://content.answers.com/main/content/img/CDE/COMPILE.GIF

Вообще переводчик стоит дорого.

19
KMån

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

 enter image description here

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

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

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

 enter image description here

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

Источник

16
Premraj

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

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

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

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

Но оба имеют разные способы «перевода» кода

Разница: 

Составитель:

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

Переводчик:

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

- оба из: https://www.quora.com/What-are-the-differences-between-a-compiler-an-interpreter-and-an-assembler-Provide-examples

Сравнение

Переводчик

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

Компилятор 

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

- из: https://www.programiz.com/article/difference-compiler-interpreter

Примеры с языками

Интерпретировано

  • Питон 
  • Рубин 
  • PHP
  • Java (Вседержитель)
  • Perl 
  • Р
  • Powershell

скомпилировано 

  • С
  • C++
  • C #
  • Objective-C
  • Стриж
  • Фортран 
7
user 451

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

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

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

Интерпретаторы - вместо генерации целевого кода Интерпретатор, по-видимому, принимает данные непосредственно вместе с исходным кодом и выдает выходные данные.

Интерпретатор отображает входные данные в выходные, используя исходную программу

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

Справочник - Компиляторы: принципы, методы и инструменты Aho aka the dragon book

0
vaibhaw.vipul

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

Чтобы выразить это прямо и интуитивно:

  • Компилятор - это то, что переводит понятный человеку исходный код в машинный код, который компьютер может читать и выполнять. 

  • Интерпретатор это то, что притворяется или имитирует компьютер для непосредственного чтения и выполнения исходного кода.

0
JawSaw