В чем ключевое отличие компилируемых языков от интерпретируемых?

«В чем ключевое отличие компилируемых языков от интерпретируемых?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Компилируемый язык (C++, Swift, Go) перед выполнением целиком преобразуется (компилируется) в машинный код или промежуточный байт-код.

  • Плюсы: Высокая производительность во время выполнения (AOT-компиляция).
  • Минусы: Требует отдельного шага компиляции.

Интерпретируемый язык (Python, JavaScript, Ruby) выполняется построчно специальной программой-интерпретатором.

  • Плюсы: Кроссплатформенность и возможность быстрого выполнения без компиляции.
  • Минусы: Обычно более низкая производительность.

Примеры:

// Swift (компилируемый): файл .swift -> компилятор -> бинарный исполняемый файл
let x = 10 + 20 // Вычисляется на этапе компиляции
// JavaScript (интерпретируемый): код выполняется движком V8 построчно
let x = 10 + 20; // Вычисляется во время выполнения

Современные тенденции: Границы стираются. Многие языки используют гибридные подходы (JIT-компиляция в Java, C#), где код сначала интерпретируется, а «горячие» участки компилируются в машинный код для ускорения.