Разница между компилятором и интерпретатором
Разница между компилятором и интерпретатором
Как Компилятор так и Интерпретатор имеют одно предназначение — конвертировать инструкции языка высокого уровня (как C или Java) в бинарную форму, понятную компьютеру. Это программное обеспечение, используемое для запуска высокоуровневых программ и кодов выполняемых различные задачи. Для разных высокоуровневых языков разработаны специфичные компиляторы/интерпретаторы. Не смотря на то что как компилятор так и интерпретатор преследуют одну и ту же цель, они отличаются способом выполнения своей задачи, то есть конвертирования высокоуровневого языка в машинные инструкции. В этой статье мы поговорим о базовой работе обоих и выделим главные отличия между компилятором и интерпретатором.
Компилятор
Компилятор транслирует высокоуровневый язык в машинный. Когда пользователь пишет код на языке высокого уровня, таком как Java, и хочет его выполнить, то прежде чем это может быть сделано, будет использован специальный компилятор разработанный для Java. Компилятор сначала сканирует всю программу, а потом транслирует ее в машинный код, который будет выполнен компьютерным процессором, после чего будут выполнены соответствующие задачи.
На картинке показано базовое очертание процесса компиляции. Тут программа написанная на языке высокого уровня показана как «Исходный код», а сконвертированный называется «Исполняемый код».
Интерпретатор
Интерпретаторы не очень сильно отличаются от компиляторов. Они также конвертируют высокоуровневые языки в читаемые машиной бинарные эквиваленты. Каждый раз когда интерпретатор получает на выполнение код языка высокого уровня, то прежде чем сконвертировать его в машинный код, он конвертирует этот код в промежуточный язык. Каждая часть кода интерпретируется и выполняется отдельно и последовательно, и если в какой-то части будет найдена ошибка, она остановит интерпретацию кода без трансляции следующей части кода.
Очертание процесса интерпретации на картинке выше показывает, что сначала исходный код конвертируется в промежуточную форму, а затем выполняется интерпретатором.
Ниже перечислены главные отличия между компилятором и интерпретатором:
- Интерпретатор берет одну инструкцию, транслирует и выполняет ее, а затем берет следующую инструкцию. Компилятор же транслирует всю программу сразу, а потом выполняет ее.
- Компилятор генерирует отчет об ошибках после трансляции всего, в то время как интерпретатор прекратит трансляцию после первой найденной ошибки.
- Компилятор по сравнению с интерпретатором требует больше времени для анализа и обработки языка высокого уровня.
- Помимо времени на обработку и анализ, общее время выполнения кода компилятора быстрее в сравнении с интерпретатором.
Источник тут.
В чем разница между реализацией компилятора и интерпретатора?
недавно я прочитал всю книгу Dragon (просто для удовольствия, я не планирую реализовывать фактический компилятор), и у меня остался этот большой вопрос, висящий в моей голове.
чем отличается реализация компилятора от интерпретатора?
для меня компилятор состоит из:
- лексер
- Parser (который строит синтаксическое дерево)
- генерировать промежуточный код (например, 3-адресный код)
- сделать все эти сумасшедшие вещи, чтобы оптимизировать, если вы хотите : -)
- создать «сборку» или «собственный код» из кода адреса 3.
теперь, очевидно, интерпретатор также имеет тот же лексер и парсер, что и компилятор.
Но что он делает после этого?
Он «читает» дерево синтаксиса и выполняет его напрямую? (вроде того, что указатель инструкции указывает на текущий узел в дереве, а выполнение — это один большой обход дерева плюс управление памятью для стека вызовов) (и если да, то как это сделать? Я надеюсь, что выполнение лучше, чем огромный оператор switch, который проверяет, какой тип узла это)
генерирует ли он код адреса 3 и интерпретирует это? (если да, то как это сделать? Опять же, я ищу что-то более элегантное, чем заявление переключателя длиной в милю)
- генерирует ли он реальный собственный код, загружает его в память и заставляет его работать? (в этот момент я думаю это больше не интерпретатор, а скорее JIT-компилятор)
кроме того, в какой момент понятие «виртуальная машина» вмешивается? Для чего вы используете виртуальную машину на языке? (чтобы быть ясным о моем уровне невежества, для меня виртуальная машина-VMWare, я понятия не имею, как концепция VM применяется к языкам программирования / исполняющим программам).
Как вы можете видеть, мой вопрос довольно широк. Я в основном ищу не только, какой метод используется, но в основном, чтобы сначала понять большие концепции, а затем подробно разобраться в том, как это работает. Мне нужны уродливые, грубые детали. Очевидно, что это скорее поиск ссылок на вещи для чтения, а не ожидание, что вы ответите на все эти детали здесь.
спасибо!
Даниэль!—1—>
EDIT: Спасибо за ваши ответы до сих пор. Я понял, что мой титул вводит в заблуждение. Я понимаю «функциональную» разницу между компилятором и интерпретатором.
Кто я? глядя на это разница, как вы реализовать интерпретатор против компилятора.
Теперь я понимаю, как реализован компилятор, вопрос в том, чем отличается интерпретатор от этого.
например: VB6 явно является как компилятором, так и интерпретатором. Теперь я понимаю часть компилятора. Однако я не могу понять, как при запуске внутри IDE он может позволить мне остановить программу в любой произвольной точке, изменить код и возобновить выполнение с новым код. Это только один крошечный пример, это не тот ответ, который я ищу. Я пытаюсь понять, как я объясняю ниже, что происходит после того, как у меня есть дерево разбора. Компилятор будет генерировать новый код из него на» целевом » языке. Что делает переводчик?
Спасибо за помощь!
21
автор: Daniel Magliola
короткий ответ:
- компилятор преобразует исходный код в исполняемый формат для последующего исполнения
существует большая свобода действий в том, как они реализованы. Интерпретатор может генерировать машинный код, а затем выполнять его, в то время как компилятор для виртуальной машины может генерировать p-код вместо машинного кода. Потоковые интерпретируемые языки например, найдите ключевые слова в словаре и немедленно выполните связанную с ними функцию собственного кода.
компиляторы обычно могут оптимизировать лучше, потому что у них больше времени для изучения кода и создания файла для последующего выполнения; интерпретаторы имеют меньше времени для оптимизации, потому что они склонны выполнять код «как есть» на первый взгляд
интерпретатор, оптимизированный в фоновом режиме, также изучает лучшие способы выполнения кода возможно
summary: разница действительно сводится к «подготовке кода для последующего выполнения» или «выполнить код прямо сейчас»
7
автор: Steven A. Lowe
компилятор-это программа, которая переводит программу на одном языке программирования, в программу на другом языке программирования. Вот так — просто и ясно.
интерпретатор переводит язык программирования в его семантическое значение.
чип x86 является интерпретатором для машинного языка x86.
Javac-это компилятор java для виртуальной машины java. java, исполняемое приложение, является интерпретатором для jvm.
некоторые переводчики делятся некоторыми элементами компиляции, поскольку они могут переводить один язык на другой внутренний язык, который легче интерпретировать.
интерпретаторы обычно, но не всегда, имеют цикл чтения-оценки-печати.
оба имеют много общего (например, лексический парсер), и есть разногласия по поводу разницы. Я смотрю на это так:—1—>
на классическое определение было бы, что компилятор анализирует и переводит поток символов в поток байтов, которые могут быть запущены процессором, тогда как интерпретатор делает то же самое, но переводит их форму, которая должна быть выполнена на части программного обеспечения (например, JVM, CLR).
но люди называют’ javac ‘ компилятором, поэтому неофициальное определение компилятора-это то, что должно быть сделано для исходного кода как отдельный шаг, тогда как интерпретаторы не имеют шага «сборки» (например, PHP, Perl).
Это не так ясно, как раньше. Раньше он строил дерево синтаксического анализа, связывал его и выполнял его (часто связывая в последнюю секунду).
BASIC был в основном сделан таким образом.
вы можете утверждать, что вещи, которые запускают байт — код (java/.net) без выполнения JIT, являются interpriters-но не в традиционном смысле, так как вам все еще нужно «скомпилировать» байт-код.
разница старой школы была: если он генерирует код процессора, это компилятор. Если вы запустите его непосредственно в вашей среде редактирования и может взаимодействовать с ним во время редактирования, его переводчиком.
Это было гораздо менее формально, чем настоящая книга дракона, но я надеюсь, что это информативно.
в отношении этой части вашего вопроса, на который другие ответы на самом деле не обращались:
кроме того, в какой момент концепция «виртуальной машины»? Что вы используете виртуальную машину для язык?
виртуальные машины, такие как JVM или CLR, являются уровнем абстракции, который позволяет повторно использовать оптимизацию компилятора JIT, сборку мусора и другие детали реализации для совершенно разных языков, которые скомпилирован для запуска на виртуальной машине.
Они также помогают вам сделать спецификацию языка более независимой от фактического оборудования. Например, хотя код C теоретически переносим, вам постоянно приходится беспокоиться о таких вещах, как endianness, размер типа и выравнивание переменных, если вы действительно хотите создать переносимый код. В то время как с Java JVM очень четко указан в этих отношениях, поэтому языковому дизайнеру и его пользователям не нужно беспокоиться о них; это работа JVM implementer для реализации указанного поведения на фактическом оборудовании.
2
автор: Michael Borgwardt
после того, как дерево разбора доступно, существует несколько стратегий:
1) непосредственно интерпретировать AST (Ruby, оригинальный интерпретатор WebKit) 2) преобразование кода — > в байтовые коды или машинный код
для достижения Edit-and-Continue счетчик программы или указатель инструкции должны быть пересчитаны и перемещены. Это требует сотрудничества со стороны IDE, поскольку код может быть вставлен до или после маленькой желтой стрелки.
один из способов это может быть сделано для встраивания позиции счетчика программы в дерево синтаксического анализа. Например, может быть специальное заявление под названием «break». Счетчик программы должен быть расположен только после инструкции «break» для продолжения работы.
кроме того, вы должны решить, что вы хотите сделать с текущим кадром стека (и переменными в стеке). Возможно, вытащить текущий стек и скопировать переменные или сохранить стек, но патч в GOTO и вернуться к текущий код.
Если вы ищете книгу, структура и интерпретация компьютерных программ («книга Мастера») — хорошее место, чтобы начать с концепций интерпретатора. Вы всегда имеете дело только с кодом схемы, который может быть пройден, оценен и передан, как если бы это был AST.
и Питер Норвиг имеет короткий пример, объясняющий основную идею с помощью Python (со многими другими примерами в комментариях), и вот еще один маленький пример в Википедии.
Как вы сказали, это обход дерева, и, по крайней мере, для вызова по значению это просто: всякий раз, когда вы видите оператор, оцените кулак операндов, затем примените оператор. Возвращаемое конечное значение является результатом программы (или инструкции, заданной REPL).
обратите внимание, что вам не всегда нужно делать обход дерева явно: вы можете создать свой AST таким образом, чтобы принять посетителя (я думаю, что SableCC делает это), или для очень маленького языки, такие как небольшие арифметические грамматики, используемые для демонстрации генераторов парсеров, вы можете просто оценить результат во время синтаксического анализа.
чтобы поддерживать объявления и назначения, вам нужно сохранить среду вокруг. Точно так же, как вы оцениваете «плюс», добавляя операнды, вы оцениваете имя функции, переменной и т. д. поискав его в окружающей среде. Поддерживая объем значит обрабатывать окружающую среду как стог и нажимать и хлопать вещи в нужное время. В общем, насколько сложен ваш интерпретатор, зависит от того, какие языковые функции вы хотите поддерживать. Например, интерпретаторы делают сбор мусора и самоанализ возможными.
для VMs: plinth и j_random_hacker описали компьютерное оборудование как своего рода интерпретатор. Верно и обратное — интерпретаторы-это машины; их инструкции оказываются более высокого уровня, чем инструкции реального Иса. Для интерпретаторов VM-стиля программы фактически напоминают машинный код, albiet для очень простая машина. байт-код Java использует всего несколько «регистров», один из которых содержит счетчик программ. Таким образом, интерпретатор VM больше похож на аппаратный эмулятор, чем интерпретаторы в примерах, которые я связал выше.
но обратите внимание, что по причинам скорости Oracle JVM по умолчанию работает, переводя запуски инструкций байт-кода Java в инструкции x86 («just in time compilation»).
Интерпретация и компиляция | Веб-программирование
Одной из ключевых характеристик PHP является то, что это интерпретируемый язык программирования. С другой стороны, языки программирования наподобие C, изначально разрабатывались для компиляции. Что это значит?
Компилируется ли язык программирования или интерпретируется, на самом деле это не зависит от природы языка программирования. Любой язык программирования может интерпретироваться так называемым интерпретатором или компилироваться с помощью так называемого компилятора.
При использовании любого языка программирования существует определенный рабочий цикл создания кода. Вы пишете его, запускаете, находите ошибки и отлаживаете. Таким образом, вы переписываете и дописываете программу, проверяете ее. То, о чем пойдет речь в этой статье, это «запускаемая» часть программы.
Когда пишете программу, вы хотите, чтобы ее инструкции работали на компьютере. Компьютер обрабатывает информацию с помощью процессора, который поэтапно выполняет инструкции, закодированные в двоичном формате. Как из выражения «a = 3;» получить закодированные инструкции, которые процессор может понять?
Мы делаем это с помощью компиляции. Существует специальные приложения, известные как компиляторы. Они принимают программу, которую вы написали. Затем анализируют и разбирают каждую часть программы и строят машинный код для процессора. Часто его также называют объектным кодом.
На одном из этапов процесса обработки задействуется компоновщик, принимающий части программы, которые отдельно были преобразованы в объектный код, и связывает их в один исполняемый файл. Вот схема, описывающая данный процесс:
Конечным элементом этого процесса является исполняемый файл. Когда вы запускаете или сообщаете компьютеру, что это исполняемый файл, он берет первую же инструкцию из него, не фильтрует, не преобразует, а сразу запускает программу и выполняет ее без какого-либо дополнительного преобразования. Это ключевая характеристика процесса компиляции — его результат должен быть исполняемым файлом, не требующим дополнительного перевода, чтобы процессор мог начать выполнять первую инструкцию и все следующие за ней.
Первые компиляторы были написаны непосредственно через машинный код или с использованием ассемблеров. Но цель компилятора очевидна: перевести программу в исполняемый машинный код для конкретного процессора.
Некоторые языки программирования разрабатывались с учетом компиляции. C, например, предназначался для того, чтобы дать возможность программистам с легкостью реализовать разные вещи. Но в итоге он разрабатывался таким образом, чтобы его можно было легко перевести на машинный код. Компиляция в программировании это серьезно!
Не все языки программирования учитывают это в своей концепции. Например, Java предназначался для запуска в «интерпретирующей» среде, а Python всегда должен интерпретироваться.
Альтернативой компиляции является интерпретация. Основная разница между компилятором и интерпретатором заключается в том, как они работают. Компилятор берет всю программу и преобразует ее в машинный код, который понимает процессор.
Интерпретатор — это исполняемый файл, который поэтапно читает программу, а затем обрабатывает, сразу выполняя ее инструкции.
Другими словами, интерпретатор выполняет программу поэтапно как часть собственного исполняемого файла. Объектный код не передается процессору, интерпретатор сам является объектным кодом, построенным таким образом, чтобы его можно было вызвать в определенное время.
Это ломает рабочий цикл, который был приведен на диаграмме выше. Теперь у нас есть новая диаграмма:
На ней мы видим, что в отличие от компилятора, интерпретатор всегда должен быть под рукой, чтобы мы могли вызвать его и запустить нашу программу. В некотором смысле интерпретатор становится процессором. Программы, написанные для интерпретации, называются «скриптами», потому что они являются сценариями действий для другой программы, а не прямым машинным кодом.
Например, так работают такие языки программирования, как Python. Вы пишете программу. Затем вводите код в интерпретатор Python, и он выполняет все описанные вами шаги. В командной строке вы можете ввести примерно следующее:
В этой команде Python — это исполняемый файл. Вы вводите в него все, что находится в файле myprogram.py, и он выполняет эти инструкции. Компьютер не запустит myprogram.py без Python. Это не машинный код, который понимает процессор. Можно скомпилировать программы Python в объектный или машинный код и запустить его непосредственно в процессоре. Но эта процедура включает в себя компиляцию кода и добавление в качестве ее части всего интерпретатора Python.
Интерпретаторы могут создаваться по-разному. Существуют интерпретаторы, которые читают исходную программу и не выполняют дополнительной обработки. Они просто берут определенное количество строк кода за раз и выполняют его.
Некоторые интерпретаторы выполняют собственную компиляцию, но обычно преобразуют программу байтовый код, который имеет смысл только для интерпретатора. Это своего рода псевдо машинный язык, который понимает только интерпретатор.
Такой код быстрее обрабатывается, и его проще написать для исполнителя (части интерпретатора, которая исполняет), который считывает байтовый код, а не код источника.
Есть интерпретаторы, для которых этот вид байтового кода имеет более важное значение. Например, язык программирования Java «запускается» на так называемой виртуальной машине. Она является исполняемым кодом или частью программы, которая считывает конкретный байтовый код и эмулирует работу процессора. Обрабатывая байтовый код так, как если бы процессор компьютера был виртуальным процессором.
У меня есть эмулятор для игровой приставки NIntendo. Когда я загружаю ROM-файл Dragon Warrior, он форматируется в машинный код, который понимает только процессор NES. Но если я создаю виртуальный процессор, который интерпретирует байтовый код во время работы на другом процессоре, я могу запустить Dragon Warrior на любой машине с эмулятором.
Это использует концепция компиляции Java, а также все интерпретаторы. На любом процессоре, для которого я могу создать интерпретатор / эмулятор, можно запускать мои интерпретируемые программы / байтовый код. В этом заключается основное преимущество интерпретатора над компилятором.
Основным аргументом за использование процесса компиляции является скорость. Возможность компилировать любой программный код в машинный, который может понять процессор ПК, исключает использование промежуточного кода. Можно запускать программы без дополнительных шагов, тем самым увеличивая скорость обработки кода.
Но наибольшим недостатком компиляции является специфичность. Когда компилируете программу для работы на конкретном процессоре, вы создаете объектный код, который будет работать только на этом процессоре. Если хотите, чтобы программа запускалась на другой машине, вам придется перекомпилировать программу под этот процессор. А перекомпиляция может быть довольно сложной, если процессор имеет ограничения или особенности, не присущие первому. А также может вызывать ошибки компиляции.
Основное преимущество интерпретации — гибкость. Можно не только запускать интерпретируемую программу на любом процессоре или платформе, для которых интерпретатор был скомпилирован. Написанный интерпретатор может предложить дополнительную гибкость. В определенном смысле интерпретаторы проще понять и написать, чем компиляторы.
С помощью интерпретатора проще добавить дополнительные функции, реализовать такие элементы, как сборщики мусора, а не расширять язык.
Другим преимуществом интерпретаторов является то, что их проще переписать или перекомпилировать для новых платформ.
Написание компилятора для процессора требует добавления множества функций, или полной переработки. Но как только компилятор написан, можно скомпилировать кучу интерпретаторов и на выходе мы имеем перспективный язык. Не нужно повторно внедрять интерпретатор на базовом уровне для другого процессора.
Самым большим недостатком интерпретаторов является скорость. Для каждой программы выполняется так много переводов, фильтраций, что это приводит к замедлению работы и мешает выполнению программного кода.
Это проблема для конкретных real-time приложений, таких как игры с высоким разрешением и симуляцией. Некоторые интерпретаторы содержат компоненты, которые называются just-in-time компиляторами (JIT). Они компилируют программу непосредственно перед ее исполнением. Это специальные программы, вынесенные за рамки интерпретатора. Но поскольку процессоры становятся все более мощными, данная проблема становится менее актуальной.
Имейте всегда в виду, что некоторые языки программирования специально предназначены для компиляции кода, например, C. В то время как другие языки всегда должны интерпретироваться, например Java.
Для меня не имеет значения, скомпилировано что-то или интерпретировано, если оно может выполнить задачу эффективно.
Некоторые системы не предлагают технические условия для эффективного использования интерпретаторов. Поэтому вы должны запрограммировать их с помощью чего-то, что может быть непосредственно скомпилировано, например C. Иногда нужно выполнить вычисления настолько интенсивно, насколько это возможно. Например, при точном распознавании голоса роботом. В других случаях скорость или вычислительная мощность могут быть не столь критичными, и написать эмулятор на оригинальном языке может быть проще.
Сообщите мне, что бы вы предпочли: интерпретацию или компиляцию? Спасибо за уделенное время!
Данная публикация представляет собой перевод статьи «Interpretation Versus Compilation» , подготовленной дружной командой проекта Интернет-технологии.ру
Принципиальное отличие компилятора от интерпретатора заключается в том что компилятор Семантические
Бесплатно
Узнать стоимость работы
Локальными называются параметры, описанные и используемые в теле подпрограммы. Локальные параметры недоступны извне подпрограммы.
Глобальными называются параметры, описанные в основной программе и доступные как во всех частях компьютерной программы, так и для всех вызываемых подпрограмм.
Фактическими называются параметры, которые передаются в подпрограмму при ее вызове.
1. Принципиальное отличие компилятора от интерпретатора заключается в том, что компилятор …
Семантические ошибки это смысловые ошибки. Например, при поиске минимального значения ошибочно был поставлен противоположный знак сравнения и решается задача поиска максимального значения. Поиск семантических ошибок не осуществляют ни компилятор, ни интерпретатор.
Пошаговый анализ команд и выполнение исходной программы характерная особенность интерпретатора. Компилятор работает по-другому.
Поиск синтаксических ошибок в исходной программе делают и компилятор, и интерпретатор.
2. Перевод исходной программы на языке программирования в эквивалентную программу на языке машинных команд называется …
Компоновка заключается в том, что к объектному модулю подсоединяются все системные и стандартные функции, на которые он ссылается.
Компоновка это один из этапов создания исполняемого файла.
Компилировать проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык (создание объектного кода) для ее исполнения. Программа уже переведена в машинные инструкции, однако еще не полностью готова к выполнению. В объектном файле имеются ссылки на различные системные функции. Компоновщик модуль системы программирования или самостоятельная программа, которая собирает результирующую программу из объектных модулей и стандартных библиотечных модулей. Этот процесс называется компоновкой, его результатом и будет исполняемый файл. С процедурой интерпретации компоновка не связана.
Отладкой называется процесс поиска и устранения ошибок в программе.
В процессе интерпретации не создается программа на машинном языке, а каждый оператор переводится на машинный язык и исполняется поочередно.
Интерпретация в разработке программ процесс непосредственного покомандного выполнения программы без предварительной компиляции, «на лету». В большинстве случаев интерпретируемая программа работает намного медленнее , чем скомпилированная программа, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность. Интерпретация связана с получением переменными значений в процессе работы программы.
Интерпретация не позволяет изменить синтаксис языка набор правил построения фраз алгоритмического языка, позволяющий определить осмысленные предложения в этом языке.
Интерпретация не позволяет изменить семантику (смысл) языка программирования. Обычно при описании семантики в рамках операционного подхода исполнение конструкций языка программирования трактуется с помощью некоторой воображаемой (абстрактной) ЭВМ.
Язык Visual Basic предложенный корпорацией Microsoft объектно-ориентированный язык программирования в среде ОС Windows, обеспечивающий коллективную разработку программного обеспечения и
поддержку технологии связи и компоновки объектов.
Язык программирования Паскаль (Pascal) процедурно-ориентированный язык программирования высокого уровня, предназначенный для широкого класса задач. Язык Паскаль считается языком структурного программирования.
Естественный язык -это язык, используемый для общения людей
Машинно-зависимый язык низкого уровня, в котором мнемонические имена соответствуют отдельным машинным командам, это ассемблер
Класс разновидность абстрактного типа данных в объектно-ориентированном программировании, характеризуется способом своего построения. Экземпляр класса это описание конкретного объекта в памяти. Класс описывает свойства и методы, которые будут доступны объекту, построенному по описанию, заложенному в класс.
Класс это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определенным поведением и способом представления. Известно, что объект это экземпляр класса.
Класс это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления.
Объектно-ориентированное программирование базируется на трех основополагающих концепциях, называемых инкапсуляцией, полиморфизмом и наследованием.
Инкапсуляция сокрытие информации и комбинирование данных и методов внутри объекта.
Полиморфизм возможность задания в иерархии объектов различных действий в методе с одним именем.
Наследование это механизм, который позволяет сохранять в новом объекте свойства и методы класса-родителя.
Разработана программа с использованием структурного программирования для языков Delphi/Visual Basic. Функция Minimalnoe_Znachenie() вычисляет значение в зависимости от переменных X,Y,Z. Значение переменной Minimum в результате выполнения процедуры станет равным…
Компилируемые и интерпретируемые языки программирования
Желающие освоить язык программирования сталкиваются с такими понятиями, как компилятор и интерпретатор. Компиляция и интерпретация — это основа работы языков программирования.
Языки программирования в общем подходе делятся на два класса — компилируемые и интерпретируемые. Стоит отметить, что эта классификация языков программирования на компилируемые и интерпретируемые, является весьма условной, поскольку для любого языка программирования может быть создан как компилятор, так и интерпретатор. Кроме того бывают языки программирования смешанного типа.
Мы полагаемся на такие инструменты, как компиляция и интерпретация, чтобы преобразовать наш код в форму, понятную компьютеру. Код может быть исполнен нативно, в операционной системе после конвертации в машинный (путём компиляции) или же исполняться построчно другой программой, которая делает это вместо ОС (интерпретатор).
Компилируемые языки
Программа на компилируемом языке при помощи специальной программы компилятора преобразуется (компилируется) в набор инструкций для данного типа процессора (машинный код) и далее записывается в исполняемый файл, который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору сразу и целиком, создавая при этом отдельную программу
Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем при каждом изменении текста программы требуется ее перекомпиляция, что создает трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.
Компилируемые языки обычно позволяют получить более быструю и, возможно, более компактную программу, и поэтому применяются для создания часто используемых программ.
Примерами компилируемых языков являются Pascal, C, C++, Erlang, Haskell, Rust, Go, Ada.
Интерпретируемые языки
Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) ее текст без предварительного перевода. При этом программа остается на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера — это интерпретатор машинного кода. Кратко говоря, интерпретатор переводит на машинный язык прямо во время исполнения программы.
Программы на интерпретируемых языках можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора.
Примерами интерпретируемых языков являются PHP, Perl, Ruby, Python, JavaScript. К интерпретируемым языкам также можно отнести все скриптовые языки.
Многие языки в наши дни имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними к минимуму. Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету». Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.
Перепечатка статьи допускается только при указании активной ссылки на сайт itmentor.by
Хочешь получать новые статьи первым? Вступай в сообщества ITmentor Вконтакте и Facebook
Что это — компилятор, или Как заставить компьютер понять, что вы от него хотите?
Завершающий этап создания программы заключается в переводе алгоритма, написанного на одном из языков программирования (С/С++, Паскаль и др.), на низкоуровневый машинный язык. Это связано с тем, что вычислительным машинам для выполнения какой-либо задачи необходимо задавать команды на понятном им языке, приближенном к бинарному и оперирующем примитивными структурами данных (бит, байт или слово). Процесс перевода проблемно-ориентированных операторов языков высокого уровня в двоичный код называется трансляцией. Существует два метода трансляции – компиляция и интерпретация.
Компилятор — что это такое?
Анализ множества толкований терминов «компилятор» и «компиляция» позволяет выделить следующее определение. Компилятор – это программа, предназначенная для перевода текста исходного алгоритма с языка высокого уровня в эквивалентный набор команд на машинно-ориентированном языке. Это так называемый объектный код, для последующей компоновки полученного объектного кода в готовый к использованию программный модуль.
Компилятор и интерпретатор – сходство и отличия
Интерпретатор – это утилита, так же как и компилятор, предназначенная для перевода исходного программного кода в машинный. Однако, в отличие от компилятора, интерпретатор запускается каждый раз вместе с программой и выполняет перевод построчно.
Можно сказать, что компилятор и интерпретатор – это языковые процессоры, позволяющие вычислительной машине распознавать и выполнять команды, заданные программистом.
Классификация компиляторов
Классифицируют компиляторы в основном по особенностям, связанным с областями их практического применения.
Векторизующий компилятор – это утилита, выполняющая трансляцию исходного кода в объектный и адаптированная под вычислительные машины, оснащенные векторными процессорами.
Гибкий компилятор запрограммирован на языке высокого уровня по модульному принципу. Его управление осуществляется с помощью таблиц. Возможно также его исполнение с помощью компилятора компиляторов.
Инкрементальный компилятор – это языковой процессор, осуществляющий повторное транслирование отдельных фрагментов исходного кода и дополнений к нему. Однако он исключает при этом перекомпиляцию всего приложения.
Интерпретирующий (пошаговый) компилятор – это утилита, последовательно выполняющая независимую компиляцию каждого оператора или команды исходного высокоуровневого кода.
Компилятор компиляторов – транслятор, способный воспринимать формальное описание для языка программирования и самостоятельно генерировать компилятор для любого языка.
Отладочный компилятор позволяет найти и устранить некоторые виды синтаксических ошибок, допущенных при написании исходного кода
Резидентный компилятор занимает постоянное место в оперативной памяти и, следовательно, является доступным для повторного использования широким рядом задач.
Самокомпилируемый компилятор написан на том же языке, с которого выполняется трансляция.
Универсальный компилятор базируется на формальном описании семантических и синтаксических параметров входного языка. Основными компонентами подобной утилиты являются ядро, синтаксический и семантический загрузчики.
Устройство компилятора
В основе любого компилятора лежат транслятор и компоновщик. Зачастую при компиляции используется внешний компоновщик, а сам компилятор выполняет лишь функцию трансляции. Случается также, что компилятор реализуется как своеобразная программа-менеджер, связанная с транслятором (или трансляторами, если при написании исходного кода использовались разные языки программирования) и компоновщиком и запускающая их исполнение при необходимости.
Языки программирования и методы трансляции

Несмотря на то, что программу, написанную на любом языке программирования, можно как компилировать, так и интерпретировать, многие высокоуровневые языки имеют предрасположенность к тому или иному методу трансляции. Так, язык С изначально рассчитан на компиляцию, а Java – на интерпретацию написанной программы. Разрабатываются компиляторы языка С довольно легко, благодаря его относительно невысокому уровню и небольшому ряду структурных элементов.
Достоинства и недостатки компиляторов и интерпретаторов. Области применения
Отметим, что скомпилированные приложения обладают большим быстродействием по сравнению с интерпретируемыми, но в то же время полученный в результате компиляции машинный код зависит от аппаратной платформы. Так, программа, написанная и скомпилированная для Windows, не будет работать, например, в Linux. Поэтому в случае интернет-приложений, когда нельзя сказать заранее, в какой среде они будут работать, используют интерпретацию или байт-код (в этом случае исходную программу преобразуют в промежуточный вид, который можно выполнить на различных аппаратных платформах).
Определение транслятора, компилятора, интерпретатора и ассемблера — Студопедия
Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.
Результатом работы транслятора будет результирующая программа, но только в том случае, если текст исходной программы является правильным — не содержит ошибок с точки зрения синтаксиса и семантики входного языка. Если исходная программа неправильная (содержит хотя бы одну ошибку), то результатом работы транслятора будет сообщение об ошибке (как правило, с дополнительными пояснениями и указанием места ошибки в исходной программе). В этом смысле транслятор сродни переводчику, например, с английского, которому подсунули неверный текст.
Компилятор – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.
Таким образом, компилятор отличается от транслятора лишь тем, что его результирующая программа всегда должна быть написана на языке машинных кодов или на языке ассемблера. Результирующая программа транслятора, в общем случае, может быть написана на любом языке — возможен, например, транслятор программ с языка Pascal на язык С. Соответственно, всякий компилятор является транслятором, но не наоборот — не всякий транслятор будет компилятором. Например, упомянутый выше транслятор с языка Pascal на С компилятором являться не будет.
Ассемблер – компилятор, который переводит каждую команду исходной программы в одну машинную команду.
Интерпретатор — это программа, которая воспринимает входную программу на исходном языке и выполняет ее.
В отличие от трансляторов интерпретаторы не порождают результирующую программу (и вообще какого-либо результирующего кода) — и в этом принципиальная разница между ними. Интерпретатор, так же как и транслятор, анализирует текст исходной программы. Однако он не порождает результирующей программы, а сразу же выполняет исходную в соответствии с ее смыслом, заданным семантикой входного языка. Таким образом, результатом работы интерпретатора будет результат, заданный смыслом исходной программы, в том случае, если эта программа правильная, или сообщение об ошибке, если исходная программа неверна.
4.3 Общая схема работы компилятора
Основные функции компилятора:
1) проверка исходной цепочки символов на принадлежность к входному языку;
2) генерация выходной цепочки символов на языке машинных команд или ассемблере.
Процесс компиляции состоит из двух основных этапов: синтеза и анализа. На этапе анализа выполняется распознавание текста исходной программы и заполнение таблиц идентификаторов. Результатом этапа служит некоторое внутреннее представление программы, понятное компилятору.
На этапе синтеза на основании внутреннего представления программы и информации, содержащейся в таблице идентификаторов, порождается текст результирующей программы. Результатом этого этапа является объектный код.
Данные этапы состоят из более мелких стадий, называемых фазами. Состав фаз и их взаимодействие зависит от конкретной реализации компилятора. Но в том или ином виде в каждом компиляторе выделяются следующие фазы:
1) лексический анализ;
2) синтаксический анализ;
3) семантический анализ;
4) подготовка к генерации кода;
5) генерация кода.
Определение Процесс последовательного чтения компилятором данных из внешней памяти, их обработки и помещения результатов во внешнюю память, называется проходом компилятора.
По количеству проходов выделяют одно-, двух-, трех- и многопроходные компиляторы. В данном пособии предлагается схема разработки трехпроходного компилятора, в котором первый проход – лексический анализ, второй — синтаксический, семантический анализ и генерация внутреннего представления программы, третий – интерпретация программы.
Общая схема работы компилятора представлена на рисунке 4.3.
![]() ![]() |
Рисунок 4.1– Общая схема работы компилятора
различий между интерпретатором и компилятором
Обычно мы пишем компьютерную программу, используя язык высокого уровня. Язык высокого уровня — это язык, понятный нам, людям. Это называется исходный код .
Однако компьютер не понимает язык высокого уровня. Он понимает только программу, написанную в 0 и 1 в двоичном виде, называемую машинным кодом .
Для преобразования исходного кода в машинный код мы используем либо компилятор , либо интерпретатор .
Как компиляторы, так и интерпретаторы используются для преобразования программы, написанной на языке высокого уровня, в машинный код, понятный компьютерам. Однако существуют различия между тем, как работают интерпретатор и компилятор.
Интерпретатор против компилятора
Переводчик | Компилятор |
---|---|
Переводит программу по одному оператору за раз. | Сканирует всю программу и переводит ее в машинный код. |
Интерпретаторам обычно требуется меньше времени для анализа исходного кода. Однако общее время выполнения сравнительно меньше, чем у компиляторов. | Компиляторам обычно требуется много времени для анализа исходного кода. Однако общее время выполнения сравнительно быстрее, чем у интерпретаторов. |
Промежуточный объектный код не создается, поэтому они эффективны с точки зрения памяти. | Создает промежуточный объектный код, который требует компоновки, следовательно, требует больше памяти. |
Языки программирования, такие как JavaScript, Python, Ruby, используют интерпретаторы. | Языки программирования, такие как C, C ++, Java, используют компиляторы. |
Работа компилятора и интерпретатора

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

- Home
-
Testing
-
- Back
- Agile Testing
- BugZilla
- Cucumber
- Database Testing 9000 J4 9000 9000 J4 9000 Тестирование базы данных
9000 Назад
-
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- Центр качества (ALM)
- Управление тестированием
- TestLink
SAP
-
- Назад
- ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- 9000 HRM
- Crystal Reports
- QM
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP 000
000
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux js
- Perl
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQL
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
Обязательно учите!
-
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- CCNA
- Облачные вычисления
- COBOL 9000 9000 Compiler
- 0005
- 9000 Встроенные системы
- Ethical Hacking
- Учебные пособия по Excel
- Программирование на Go
- IoT
- ITIL
- Jenkins
- MIS
- Сетевые подключения
- Операционная система
- 000
- 9000
- Назад
- Управление проектами Обзоры
- Salesforce
- SEO
- Разработка программного обеспечения
- VBA
Большие данные
-
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Хранилище данных
000500050005
c — путаница между компилятором и интерпретатором?
- Товары
- Клиенты
- Случаи использования
- Переполнение стека Общественные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним возможности технической карьеры
- Талант Нанять технических талантов
- реклама Обратитесь к разработчикам по всему миру
Загрузка…
против интерпретатора — полная разница между компилятором и интерпретатором
В чем разница между компилятором и интерпретатором?
Компилятор — это компьютерная программа, которая преобразует язык высокого уровня (исходный код) в машинный язык (объектный язык), тогда как интерпретатор — это компьютерная программа, которая выполняет программы, написанные на языке высокого уровня (исходный код).
В общем, компьютерные программы написаны с использованием языков высокого уровня , которые легко понять людям.Компьютер может следовать исходному коду или высокоуровневому языку только после его преобразования в машинный язык с помощью компилятора или интерпретатора. Здесь мы поможем вам ближе познакомиться с ролью компилятора и интерпретатора и понять, в чем разница между интерпретатором и компилятором?
Интерпретатор против компилятора: сравнительная таблица
Различия между компилятором и интерпретатором приведены в таблице ниже:
Переводчик | Компилятор |
---|---|
Различные этапы программирования: 1. Создание программы. |
Различные шаги программирования: 1. Создание программы. |
После интерпретации программы могут работать только в системах, имеющих соответствующий интерпретатор. | Программа не может быть изменена без возврата к исходному коду. |
Интерпретаторы проверяют одну строку за другой, поэтому общее время, необходимое для интерпретации полной программы, больше, чем время, затрачиваемое компилятором на выполнение своей работы. | Поскольку программный код уже переведен на машинный язык, время, необходимое для выполнения кода, меньше. Он компилирует всю программу сразу и, следовательно, работает быстрее. |
Интерпретатор не создает целевой код или промежуточный код . | Компилятор генерирует целевой код или промежуточный код. |
Интерпретатор не генерирует объектный код, поэтому требуется мало памяти. | Компилятор генерирует объектный код, поэтому ему требуется больше места в памяти. |
Интерпретатор отображает ошибки каждого отдельного оператора одну за другой; это позволяет пользователю легко обнаруживать ошибки | Компилятор показывает все ошибки одновременно.Поэтому распознать ошибки по отдельности непросто. |
Когда в интерпретаторе возникает ошибка, процесс перевода для определенной строки приостанавливается. Как только ошибка устранена, начинается процесс перевода следующей строки. | В компиляторе, если в программе появляется ошибка, процесс трансляции останавливается. После отладки вся программа снова проходит процесс перевода. |
Он основан на модели интерпретации. | Он основан на модели связывания и загрузки языкового перевода. |
Интерпретатор используется для интерпретации программ, написанных на Ruby, Python, Java, PHP и т. Д. | Компилятор полезен для компиляции языков программирования, таких как Scala, C, C ++, C # и т. Д. |
В качестве входных данных принимает одну строку программного кода. | Вся программа формирует входные данные для компилятора. |
Интерпретатор подходит для разработки и программной среды. | Компилятор лучше всего подходит для производственной среды. |
Интерпретируемые машинные языки поддерживают причину динамического набора текста | Динамическую типизацию сложно реализовать, поскольку компиляторы не могут предсказать события во время очереди. |
Машинные коды вообще не сохраняются. | Компилятор хранит машинный язык в виде машинных кодов на диске. |
Что такое компилятор?
Компилятор определяется как компьютерная программа, которая оборудована для преобразования кодов, написанных на языках программирования высокого уровня, в машинные коды. Он переводит коды, понятные людям, в двоичные коды, состоящие из 1 и 0 бит . Коды, переведенные на двоичный или машинный язык, обрабатываются компьютером для выполнения соответствующих задач.
Роль компилятора
- Компилятор должен соблюдать все установленные правила синтаксиса языка, на котором он разработан.
- Компилятор — это просто компьютерная программа. Он не способен отлаживать или исправлять ошибки, обнаруженные в программе.
- В случае ошибки пользователям становится необходимо как можно раньше внести необходимые изменения в синтаксис программы, иначе она не сможет скомпилировать.
- На этапе анализа компилятор проверяет грамматику, синтаксис и семантику кода, после чего может быть сгенерирован промежуточный код. Эта фаза включает семантический анализатор, лексический анализатор и синтаксический анализатор для его функциональности.
- Фаза синтеза — это этап, на котором оптимизируется промежуточный код. На этом этапе также создается целевой код, который включает в себя генератор кода и оптимизатор кода.
Что такое переводчик?
Интерпретатор может быть определен как альтернатива для реализации языков программирования и функций таким же образом, как и компилятор. Он выполняет синтаксический анализ, лексирование и проверку типов так же, как компилятор. Он оборудован для прямой обработки синтаксического дерева.Интерпретатор может обращаться к выражениям, а также выполнять операторы из синтаксического дерева.
Роль переводчика
- Интерпретатор используется для преобразования исходного кода во время выполнения, по одной строке за раз.
- Он полностью переводит программы на языке высокого уровня на язык машинного уровня, понятный компьютеру.
- Интерпретатор позволяет изменять и оценивать программы на этапе выполнения.
- Он способен анализировать и обрабатывать программы сравнительно быстрыми способами.
- Интерпретатор лучше всего использовать для быстрого тестирования программы на этапе модификации и помогает в ее эффективном запуске.
Компилятор и интерпретатор Java
Java — это скомпилированный язык компьютерного программирования. Однако вместо непосредственной компиляции в исполняемый машинный код он сначала компилируется в двоичную промежуточную форму, называемую байт-кодом JVM. После этого байт-код компилируется или интерпретируется по мере необходимости для запуска программы.Поскольку Java является одновременно интерпретатором и компилируемым языком программирования, он часто известен как язык интерпретатора компилятора. Это также объясняет, использует ли Java компилятор или интерпретатор — он использует оба.
Заключение
Пункты выше хорошо объяснили определение, роль и различия между компилятором и интерпретатором . Объяснение сравнения компилятора и интерпретатора показывает, что они оба предназначены для выполнения одной и той же работы. Однако они, как правило, различаются своими операционными процедурами.Будь то интерпретатор на Java или компилятор, используемый для перевода команд Java, и у них есть свои плюсы и минусы, различные функции экономии времени, области приложений и т. Д.
,
Отправить ответ