Высокоуровневые языки программирования часто разделяются на интерпретируемые и компилируемые. При выборе языка и дальнейшей работе с ним необходимо учитывать его преимущества и недостатки, связанные с его способом трансляции.
Что такое трансляция
Важнейшей частью компьютера является процессор. Именно он обрабатывает данные и выполняет программы, созданные программистами. Однако у процессора есть особенность: он работает только с машинным кодом.
Машинный код состоит из простейших инструкций, закодированных в двоичном формате. Эти инструкции могут быть типа «прибавь», «перемести» и так далее. Процессор выполняет эти инструкции одну за другой.
Нам же, людям, работать с машинным кодом неудобно. Чтобы сделать простейшую программу необходимо написать очень много инструкций в виде двоичного кода (хотя раньше вполне так и писали). Человеку удобно работать с исходным кодом - в нём вместо единиц и нулей используются понятные человеку слова, обычно на английском языке.
Поэтому для упрощения придумали писать машинный код с использованием специальных обозначений, где простейшие процессорные инструкции пишутся на человеческом языке в виде сокращений - мнемоник. Язык программирования, основанный на мнемониках, называется ассемблером.
Например, вместо «11101101» программист может написать просто «mov». Но как процессор поймёт, что «mov» - это «11101101»? Для этого нужно использовать отдельную программу, которая станет переводчиком с "человеческого" языка на "процессорный" - эта программа называется транслятором.
Соответственно трансляция - это процесс перевода программ с одного языка на другой. Программа, которая осуществляет трансляцию и является транслятором.
Уровни абстракций
В современных компьютерах используется множество языков программирования. Из-за этого возникает необходимость в уровнях абстракций. Уровень абстракции определяет, насколько язык программирования похож на человеческий. Чем выше уровень абстракции, тем больше язык похож на человеческий, а чем ниже — тем больше он напоминает машинный код.
На рисунке выше появились два новых понятия: интерпретация и компиляция.
Интерпретация и компиляция
На самом деле, транслировать программы с одного языка на другой можно разными способами. Два самых популярных подхода:
- Транслировать программу сразу целиком - это компиляция.
- Транслировать программу построчно - это интерпретация.
Разные языки программирования используют разные подходы. Отсюда и разделения языков программирования на интерпретируемые и компилируемые.
На самом деле, есть и другие виды трансляции, но об этом нужно говорить отдельно.
Рассмотрим особенности каждого из подходов.
Компилируемые языки программирования
Среди наиболее известных представителей компилируемых языков программирования можно выделить C, C++, Rust и Go. Эти языки широко используются для разработки системного программного обеспечения, компьютерных игр и блокчейн-технологий.
Программы, написанные на компилируемых языках, быстро выполняются. После того как компилятор переводит исходный код программы в машинный, получается простой исполняемый файл с расширением «.exe», который готов к работе и не требует дальнейшей трансляции.
Кроме того, компилируемые языки обычно более безопасны. Компиляторы способны в процессе трансляции выявлять некоторые допущенные программистом ошибки. В то время как программы, написанные на интерпретируемых языках, чаще ломаются уже в процессе выполнения.
Преимущество компилируемых языков в том, что после трансляции программы в машинный код exe-файл можно распространять среди пользователей, даже если у них нет компилятора.
Однако у компилируемых языков есть и недостатки.
Во-первых, компиляция может занимать много времени. Чтобы просто запустить написанную программу и проверить её работу, нужно дождаться завершения процесса трансляции.
Во-вторых, программы, переведённые в машинный код, смогут выполнять только на тех процессорах, под которые они были скомпилированы. Так, например, программа, скомпилированная под "компьютерные" процессоры архитектуры x86, не запустится на "мобильных" процессорах архитектуры ARM.
Интерпретируемые языки программирования
Среди наиболее популярных интерпретируемых языков программирования можно выделить Python, PHP и JavaScript.
Интерпретируемые языки позволяют очень быстро и удобно разрабатывать исходный код программ. Чтобы получить результат, достаточно написать одну строчку - такая интерактивность позволяет практически мгновенно проверять отдельные части написанного кода. В Python для этого существует специальная программа "IDLE Python".
Код, написанный на интерпретируемом языке сможет запуститься только на том устройстве, где установлен интерпретатор. С одной стороны, это усложняет распространение программ среди пользователей, с другой - позволит запустить код везде, где интерпретатор уже установлен.
Интерпретируемые языки программирования работают медленнее компилируемых, поскольку их трансляция происходит непосредственно во время выполнения программы. По этой причине на очень популярных языках Python и JavaScript написано так мало компьютерных игр - они просто виснут.
В интерпретируемых языках менее развита "защита от дурака". В то время, как компилятор может заранее найти ошибку и указать на неё, интерпретатор будет молчать до тех пор, пока программа не сломается прямо в процессе выполнения.
Основные преимущества и недостатки интерпретируемых языков представлены на рисунке:
Заключение
Язык программирования выбирается под конкретные решаемые программистом задачи. Важно различать компиляцию и интерпретацию, чтобы подходить к процессу разработки более осознанно.