Как было описано в одной из предыдущих статей, для работы с первыми компьютерами приходилось писать двоичный машинный код, то есть последовательность нулей и единиц. Программировать таким образом крайне неудобно и трудоемко.
Чтобы облегчить труд программистов, были созданы языки программирования низкого уровня, позволившие писать на более понятном для человека языке.
Но такие команды всё еще требовалось переводить в двоичный код, поэтому были созданы трансляторы (интерпретаторы и компиляторы).
Итак, трансляция программы – преобразование программы, представленной на одном из языков программирования, в программу на другом языке.
В программировании в основном выделяют два вида трансляции: компиляция и интерпретация.
Классификация языков программирования на компилируемые и интерпретируемые, является неточной и весьма условной, поскольку для любого языка программирования может быть создан как компилятор, так и интерпретатор.
Компиляция
Компилятор — это вид транслятора, преобразующий исходный код с какого-либо языка программирования на машинный язык.
Компилируемый язык программирования — язык программирования, исходный код которого преобразуется компилятором в машинный код и записывается в файл, с особым заголовком и/или расширением.
Достоинства компиляции:
- компиляция программы выполняется один раз;
- наличие компилятора на устройстве, для которого компилируется программа, не требуется.
Недостатки компиляции:
- компиляция — медленный процесс;
- при внесении изменений в исходный код, требуется повторная компиляция.
Примерами таких языков могут служить: C , C ++, BASIC (создавался как компилируемый, но многие реализации являются интерпретируемыми) , Delphi , Pascal , и не так давно появившийся язык от Google – Go .
Интерпретация
Интерпретация – процесс чтения и выполнения исходного кода. Реализуется программой – интерпретатором.
Интерпретируемый язык программирования – язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором (как в компилируемых языках), а исполняется с помощью специальной программы-интерпретатора.
Достоинства интерпретаторов по сравнению с компиляторами:
- возможность работы в интерактивном режиме;
- отсутствие необходимости перекомпиляции исходного кода после внесения изменений и при переносе кода на другую платформу.
Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:
- кроссплатформенность
- динамическая типизация
Недостатки интерпретаторов по сравнению с компиляторами:
- низкая производительность (машинный код исполняется процессором, а интерпретируемый код — интерпретатором; машинный код самого интерпретатора исполняется процессором);
- необходимость наличия интерпретатора на устройстве, на котором планируется интерпретация программы;
- обнаружение ошибок синтаксиса на этапе выполнения (актуально для чистых интерпретаторов).
Наиболее известными интерпретируемыми языками являются Java, JavaScript, Python и Ruby.
Что же лучше?
Многие языки имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними к минимуму. У каждого вида исполнения кода есть преимущества и недостатки.
Вкратце, компилируемые языки являются самыми эффективными, поскольку они исполняются как машинный код и позволяют использовать аппаратное обеспечение системы. Однако это вводит дополнительные ограничение на написание кода и делает его платформо-зависимым. Интерпретируемые же языки не зависят от платформы. Тем не менее, в скорости исполнения они значительно уступают компилируемым языкам.
Напишите в комментариях, если хотите статью по динамической компиляции или узнать разницу между простым интерпретатором и интерпретатором компилирующего типа.