Компилятор

Оригинальное название: compiler

Коротко

Программа, которая целиком переводит исходный код в другую форму — машинные команды, байткод или другой язык — до того, как программа будет запущена.

Что такое «Компилятор»

Результат компиляции — исполняемый файл или набор файлов, которые затем запускают без исходников. Так работают C, C++, Go, Rust: программист пишет текст, компилятор выдаёт программу для конкретного процессора и операционной системы. Java и C# компилируются в байткод, который потом выполняет виртуальная машина. Поскольку перевод делается заранее, компилятор успевает проверить типы, найти многие ошибки до запуска и оптимизировать код.

Из каких этапов состоит компиляция

  1. Лексический анализ — текст разбивается на токены: имена, числа, ключевые слова, знаки.
  2. Синтаксический анализ — из токенов строится дерево программы; здесь ловятся синтаксические ошибки.
  3. Семантический анализ — проверка типов и того, что все используемые имена объявлены.
  4. Оптимизация — упрощение вычислений, удаление недостижимого кода.
  5. Генерация кода — вывод в машинный язык, байткод или другой целевой формат.

Пример: компиляция в веб-разработке

Даже на сайтах с PHP компиляторы работают каждый день — во фронтенде. TypeScript переводится в JavaScript, Sass — в CSS, а сборщики превращают современный JavaScript в код, понятный старым браузерам. Компиляторы из одного языка высокого уровня в другой называют транспиляторами.

npx tsc src/app.ts --outDir dist          # TypeScript → JavaScript
npx sass styles/main.scss dist/main.css   # Sass → CSS
gcc hello.c -o hello                      # C → исполняемый файл

Ошибка типа в TypeScript всплывёт на этапе сборки, а не у посетителя сайта, — в этом главное практическое преимущество компиляции.

Компилятор, интерпретатор и JIT

Классическое противопоставление: компилятор переводит всё заранее, интерпретатор выполняет по ходу. На практике подходы смешаны. Компиляция «на лету», JIT, переводит в машинный код часто выполняемые участки прямо во время работы программы: так ускоряют JavaScript в браузерах, Java и, начиная с восьмой версии, PHP. Компиляцию заранее, до запуска, называют AOT. Выбор между ними — компромисс между скоростью запуска, скоростью работы и переносимостью.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение