PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

В чем разница между интерпретируемым и компилируемым языком?

Основы языка

Интерпретируемый язык выполняется построчно интерпретатором в рантайме, а компилируемый заранее переводится в машинный код. JavaScript — интерпретируемый, но с JIT-компиляцией.

Компилируемый язык

Весь код заранее переводится компилятором в машинный код, затем запускается:

Исходник → [компилятор] → машинный код → выполнение
  • Плюсы: быстрое выполнение, ошибки ловятся при компиляции.
  • Минусы: нужна компиляция под каждую платформу, дольше цикл разработки.
  • Примеры: C, C++, Rust, Go.

Интерпретируемый язык

Код читается и выполняется на лету интерпретатором:

Исходник → [интерпретатор] → выполнение построчно
  • Плюсы: кроссплатформенность, быстрая разработка, гибкость.
  • Минусы: медленнее, ошибки в рантайме.
  • Примеры: JavaScript, Python, Ruby.

Различия

  • Когда переводится: компилируемый — заранее; интерпретируемый — в рантайме.
  • Скорость: компилируемый обычно быстрее.
  • Ошибки: компилируемый ловит на компиляции; интерпретируемый — в рантайме.
  • Платформа: интерпретируемый кроссплатформенный (нужен интерпретатор).

JavaScript — гибрид

Формально интерпретируемый, но движки (V8) используют JIT-компиляцию: интерпретируют код и на лету компилируют «горячие» участки в машинный код для скорости.

Коротко для собеседования

Компилируемый язык (C, Rust) заранее переводится в машинный код — быстро, ошибки на компиляции. Интерпретируемый (JS, Python) выполняется построчно в рантайме — кроссплатформенно, гибко, но медленнее, ошибки в рантайме. JavaScript интерпретируемый, но с JIT-компиляцией горячего кода (V8).

Другие вопросы раздела