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

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

8 ответов

Решение

Составители

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

интерпретаторы

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

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

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

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

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

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

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

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

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

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

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

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

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

Различия

Поведение

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

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

Спектакль

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

Но оба имеют разные способы "перевода" кода.Разница:

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

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

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

Сравнение

интерпретаторы

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

Составители

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

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

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

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

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

  • С
  • C++
  • C#
  • Objective-C
  • СВИФТ
  • Фортран

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

Поместите это прямо и интуитивно,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

и SmallTalk и SOM: простой объектный компьютер:

Все современные интерпретаторы включают в себя компилятор: компилируют элементы высокого уровня в низкоуровневый, но переносимый байт-код или используют JIT для компиляции машинного кода в ОЗУ.

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

Другие вопросы по тегам