Компилируемый язык — это язык программирования , реализации которого обычно представляют собой компиляторы (трансляторы, генерирующие машинный код из исходного кода ), а не интерпретаторы (пошаговые исполнители исходного кода , в которых не происходит перевода перед выполнением).
Термин несколько расплывчатый. В принципе, любой язык можно реализовать с помощью компилятора или интерпретатора. [1] Комбинация обоих решений также распространена: компилятор может преобразовать исходный код в некоторую промежуточную форму (часто называемую p-кодом или байт-кодом ), которая затем передается интерпретатору, который его выполняет.
Программы, скомпилированные в собственный код во время компиляции, как правило, работают быстрее, чем программы, переведенные во время выполнения, из-за затрат на процесс трансляции. Однако новые технологии, такие как своевременная компиляция и общие улучшения в процессе перевода, начинают сокращать этот разрыв. Смешанные решения, использующие байт-код, имеют тенденцию к средней эффективности.
Обычно компилируются языки программирования низкого уровня , особенно когда основной задачей является эффективность, а не кроссплатформенная поддержка. Для таких языков существует больше однозначных соответствий между программным кодом и аппаратными операциями, выполняемыми машинным кодом , что упрощает программистам контроль использования центрального процессора (ЦП) и памяти в мельчайших деталях.
Приложив некоторые усилия, всегда можно написать компиляторы даже для традиционно интерпретируемых языков . Например, Common Lisp можно скомпилировать в байт-код Java (затем интерпретировать виртуальной машиной Java ), код C (затем скомпилировать в машинный код) или непосредственно в машинный код. Языки программирования, поддерживающие несколько целей компиляции, дают разработчикам больше возможностей для выбора скорости выполнения, межплатформенной совместимости или использования.
Некоторые языки, которые обычно считаются компилируемыми: