Skip to content

Latest commit

 

History

History
53 lines (39 loc) · 7.88 KB

Компиляция-и-интерпретация.mediawiki

File metadata and controls

53 lines (39 loc) · 7.88 KB

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

Существует два подхода для того, чтобы заставить компьютер выполнять программу, написанную на каком-то языке программирования: компиляция (compilation) программ и интерпретация (interpretation) программ.

Table of Contents

Компиляция

Программа целиком переводится из текста на языке программирования в команды процессора (машинный код). Для этого используется специальная программа – компилятор (compiler). На выходе компилятора получается исполняемый файл для той платформы, для которой предназначена наша программа. Чтобы запускать программу компилятор больше не нужен. Для других платформ полученный исполняемый файл может не подходить. ("Платформа" – так называют тип исполнителя, который будет выполнять программу, и тип окружения, в котором программа будет работать, то есть – тип процессора и тип операционной системы).

Именно такой подход используется для программ, написанных на языке Си.

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

Интерпретация

Текст программы считывает специальная программа – интерпретатор (interpreter), после чего интерпретатор выполняет те действия, которые описаны в программе. Для каждого запуска программы необходимо наличие интерпретатора для данного языка программирования в системе. На всех системах, где есть программа-интерпретатор, можно выполнять нашу программу.

Такой подход используется, например, для Питона и Java-sсript (не путать с Java!).

Такие программы как командная оболочка Unix/Linux-систем, командная строка Windows – тоже интерпретаторы, которые интерпретируют свой командный язык.

Аналогия

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

  • Заранее письменно перевести весь текст на нужные языки, а затем раздать переведённые тексты друзьям. Такой переводчик называется по-английски translator, а в случае "перевода" текста нашей программы мы имеем дело с программой-транслятором (или, в частном случае – с компилятором).
  • Раздать друзьям текст на языке оригинала (в нашем примере – на русском), и попросить каждого из друзей воспользоваться услугами своего синхронного переводчика, который бы читал оригинальный текст и по мере чтения переводил его на нужный язык. Такой переводчик называется по-английски interpreter, а в случае выполнения действий, описываемых текстом нашей программы, нам бы потребовалась программа-интерпретатор.

Сравнение

Попробуйте сравнить подходы к выполнению программ при помощи компиляции и при помощи интерпретации по следующим аспектам для разработчика программы (программиста) и её пользователя:

  • Количество раз, которое нужно производить разбор текста программы.
  • Скорость выполнения программы.
  • Простота внесения изменений в программу.
  • Необходимость наличия дополнительных программ для запуска "нашей" программы.
  • Поддержка разных платформ (переносимость).

Сложные случаи

Могут применяться смешанные подходы.

Например, программы на языке Java компилируются (транслируются) в так называемый "Java-байт-код" – низкоуровневые команды, похожие на команды процессора. Для того, чтобы выполнить этот байт-код на каждой конкретной платформе всё равно нужен свой интерпретатор, но благодаря приближенности команд байт-кода к командам процессорного уровня, такой интерпретатор может быть очень быстродейственным. При этом при компиляции генерируемые команды байт-кода не зависят от той платформы, где должна выполняться программа

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

Вопросы

А если программу скомпилировали для одной платформы, то есть ли способы исполнить полученный исполняемый файл на другой платформе? Что для этого может потребоваться?

Мультфильм

https://youtu.be/_C5AHaS1mOA