Компилятор
Оригинальное название: compiler
Коротко
Программа, которая целиком переводит исходный код в другую форму — машинные команды, байткод или другой язык — до того, как программа будет запущена.
Что такое «Компилятор»
Результат компиляции — исполняемый файл или набор файлов, которые затем запускают без исходников. Так работают C, C++, Go, Rust: программист пишет текст, компилятор выдаёт программу для конкретного процессора и операционной системы. Java и C# компилируются в байткод, который потом выполняет виртуальная машина. Поскольку перевод делается заранее, компилятор успевает проверить типы, найти многие ошибки до запуска и оптимизировать код.
Из каких этапов состоит компиляция
- Лексический анализ — текст разбивается на токены: имена, числа, ключевые слова, знаки.
- Синтаксический анализ — из токенов строится дерево программы; здесь ловятся синтаксические ошибки.
- Семантический анализ — проверка типов и того, что все используемые имена объявлены.
- Оптимизация — упрощение вычислений, удаление недостижимого кода.
- Генерация кода — вывод в машинный язык, байткод или другой целевой формат.
Пример: компиляция в веб-разработке
Даже на сайтах с 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. Выбор между ними — компромисс между скоростью запуска, скоростью работы и переносимостью.

