Разница против того, как они работают
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
- Фортран