Введение

Компилируемый язык программирования — это язык программирования, реализации которого обычно представляют собой компиляторы (программы, преобразующие исходный код в машинный код), а не интерпретаторы (пошаговые исполнители исходного кода, не осуществляющие предварительного перевода во время выполнения). Сам термин несколько размыт. В принципе, любой язык программирования может быть реализован как с помощью компилятора, так и с помощью интерпретатора. Распространено также сочетание обоих подходов: компилятор может преобразовывать исходный код в промежуточную форму (часто называемую p-кодом или байт-кодом), которая затем передается интерпретатору для исполнения.

Преимущества и недостатки

Программы, компилируемые в машинный код на этапе компиляции, как правило, работают быстрее, чем те, которые транслируются во время выполнения, из-за накладных расходов, связанных с процессом трансляции. Однако новые технологии, такие как JIT-компиляция (компиляция "на лету"), и общие улучшения в процессе трансляции начинают сокращать этот разрыв. Решения, использующие байт-код, обычно демонстрируют промежуточную эффективность. Языки программирования низкого уровня обычно компилируются, особенно когда приоритетом является производительность, а не кроссплатформенность. Для таких языков существует большее соответствие один к одному между написанным кодом и аппаратными операциями, выполняемыми машинным кодом, что позволяет программистам более точно управлять использованием центрального процессора (ЦП) и памяти. При определенных усилиях всегда возможно разработать компиляторы даже для традиционно интерпретируемых языков. Например, Common Lisp можно скомпилировать в байт-код Java (который затем интерпретируется виртуальной машиной Java), в код на C (который затем компилируется в машинный код) или непосредственно в машинный код. Языки программирования, поддерживающие несколько целевых платформ для компиляции, предоставляют разработчикам больше возможностей для выбора между скоростью выполнения, кроссплатформенной совместимостью или областью применения.