Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Составители

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

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

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

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

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

Характеристики интерпретатора:

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

Ответ 2

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

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

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

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

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

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

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

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

Различия

Поведение

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

enter image description here

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

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

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

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

enter image description here

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

Источник

Ответ 5

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

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

A: Большинство программ написаны на языках высокого уровня (С#, 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

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

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

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

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

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