Как работает интерпретатор / компилятор - PullRequest
67 голосов
/ 04 марта 2010

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

Ответы [ 8 ]

54 голосов
/ 04 марта 2010

Составители

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

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

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

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

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

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

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

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

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

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

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

Что такое интерпретатор?

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

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

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

Различия

Поведение

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

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

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

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

Компиляторы интерпретации

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

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

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

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

19 голосов
/ 04 марта 2010

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

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

alt text
(источник: answers.com )

Обычно переводчик обходится дорого.

16 голосов
/ 22 июля 2015

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

enter image description here

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

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

Например: Компилятор выдаст почти все ошибки одновременно, но интерпретатор будет работать до тех пор, пока вы не напишите неверную инструкцию

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

enter image description here

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

Источник

7 голосов
/ 05 июня 2015

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

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

Сравнение

Переводчик

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

Компилятор

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

- от: https://www.programiz.com/article/difference-compiler-interpreter

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

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

  • Python
  • Рубин
  • PHP
  • JAVA (Вседержитель)
  • Perl
  • R
  • Powershell

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

  • C
  • C ++
  • C #
  • Objective-C
  • SWIFT
  • Фортран
0 голосов
/ 15 июня 2018

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

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

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

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

0 голосов
/ 25 февраля 2018

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

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

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

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

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

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

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

0 голосов
/ 28 марта 2017

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

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

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

и SmallTalk и SOM: машина простых объектов:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...