Три переводчика: кто раньше начнёт и кто раньше закончит
Один цикл из шести повторов, три способа перевести его для процессора.
// один цикл, три переводчика
Программе нужно шесть раз повторить один и тот же кусок кода. Процессор понимает только свои инструкции, поэтому текст надо перевести - вопрос лишь в том, когда. Нажимайте «Такт»: слева видно, на что уходит каждый такт, а справа - сколько повторов уже сделано.
Компиляция
Повторов сделано 6 / 6 дорожка закончилаПереводчик прочитал книгу целиком и отдал готовый перевод. Компилятор переводит весь код заранее, до запуска, и получается исполняемый файл. Так работают C, C++, Go и Rust.
- перевод заранее Компилятор читает весь исходный код и разбирает его структуру
- перевод заранее Проверяет логику и находит ошибки ещё до запуска
- перевод заранее Оптимизирует: убирает лишние вычисления, подбирает удачные инструкции
- полезная работа Повтор 1: процессор выполняет готовые инструкции напрямую
- полезная работа Повтор 2: посредника между программой и процессором нет
- полезная работа Повтор 3
- полезная работа Повтор 4
- полезная работа Повтор 5
- полезная работа Повтор 6
Старт поздний, зато дальше без остановок: 6 повторов за 9 тактов, и перевода в них больше нет. Пользователь запускает уже готовый файл, компилятор своё дело сделал.
Интерпретация
Повторов сделано 6 / 6 дорожка закончилаПереводчик сидит рядом и переводит вслух, страницу за страницей. Интерпретатор выполняет код строка за строкой прямо во время запуска. Так работают Python, PHP и старый JavaScript.
- перевод на ходу Интерпретатор читает строку и переводит её
- полезная работа Повтор 1 выполнен
- перевод на ходу Та же строка переводится заново
- полезная работа Повтор 2 выполнен
- перевод на ходу И снова перевод
- полезная работа Повтор 3 выполнен
- перевод на ходу Перевод
- полезная работа Повтор 4 выполнен
- перевод на ходу Перевод
- полезная работа Повтор 5 выполнен
- перевод на ходу Перевод
- полезная работа Повтор 6 выполнен
Начали сразу, без подготовки, но посредник остался навсегда: 6 повторов за 12 тактов, и половина из них ушла на перевод одного и того же. Зато запустить скрипт можно мгновенно, ничего не собирая.
Компиляция на ходу (JIT)
Повторов сделано 6 / 6 дорожка закончилаНачинает как интерпретатор, но следит, какие участки выполняются часто. Заметив горячий цикл, переводит именно его в машинные инструкции прямо во время работы. Так работают JavaScript в браузере, Java и Python 3.13+.
- перевод на ходу Перевод на ходу, как у интерпретатора
- полезная работа Повтор 1 выполнен
- перевод на ходу Перевод
- полезная работа Повтор 2 выполнен
- горячий участок Участок признан горячим и скомпилирован в машинные инструкции
- полезная работа Повтор 3: уже напрямую, без интерпретатора
- полезная работа Повтор 4
- полезная работа Повтор 5
- полезная работа Повтор 6
Начали почти сразу и закончили не позже остальных: 6 повторов за 9 тактов. Чем длиннее цикл, тем заметнее выигрыш: перевод горячего участка окупается один раз, а пользуются им все следующие повторы.
Такты здесь условные и одинаковой длины - это модель, а не замер. В жизни разбор и оптимизация всей программы занимают куда больше одного шага, перевод строки интерпретатором дешевле полной компиляции, а JIT ещё и решает сам, что считать горячим. Смысл картинки в другом: видно, когда именно тратится время на перевод и сколько раз один и тот же кусок переводится заново.
Интерактив разработан ANY.BY - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/tri-perevodchika