В чем разница между интерпретируемым и компилируемым языком?
Основы языка
Интерпретируемый язык выполняется построчно интерпретатором в рантайме, а компилируемый заранее переводится в машинный код. JavaScript — интерпретируемый, но с JIT-компиляцией.
Компилируемый язык
Весь код заранее переводится компилятором в машинный код, затем запускается:
Исходник → [компилятор] → машинный код → выполнение- Плюсы: быстрое выполнение, ошибки ловятся при компиляции.
- Минусы: нужна компиляция под каждую платформу, дольше цикл разработки.
- Примеры: C, C++, Rust, Go.
Интерпретируемый язык
Код читается и выполняется на лету интерпретатором:
Исходник → [интерпретатор] → выполнение построчно- Плюсы: кроссплатформенность, быстрая разработка, гибкость.
- Минусы: медленнее, ошибки в рантайме.
- Примеры: JavaScript, Python, Ruby.
Различия
- Когда переводится: компилируемый — заранее; интерпретируемый — в рантайме.
- Скорость: компилируемый обычно быстрее.
- Ошибки: компилируемый ловит на компиляции; интерпретируемый — в рантайме.
- Платформа: интерпретируемый кроссплатформенный (нужен интерпретатор).
JavaScript — гибрид
Формально интерпретируемый, но движки (V8) используют JIT-компиляцию: интерпретируют код и на лету компилируют «горячие» участки в машинный код для скорости.
Коротко для собеседования
Компилируемый язык (C, Rust) заранее переводится в машинный код — быстро, ошибки на компиляции. Интерпретируемый (JS, Python) выполняется построчно в рантайме — кроссплатформенно, гибко, но медленнее, ошибки в рантайме. JavaScript интерпретируемый, но с JIT-компиляцией горячего кода (V8).