Инкрементный компилятор - это разновидность инкрементных вычислений, применяемых к полю компиляция. Вполне естественно, что в то время как обычные компиляторы выполняют так называемую чистую сборку, то есть (пере) строят все программные модули, инкрементный компилятор перекомпилирует только те части программы, которые были изменены.
В императивном программировании и разработке программного обеспечения инкрементный компилятор - это компилятор, который при вызове принимает только изменения известного набора из исходных файлов и обновляет любые соответствующие выходные файлы (на целевом языке компилятора, часто байт-код ), которые могут уже существовать из предыдущих компиляций. Эффективно опираясь на ранее скомпилированные выходные файлы, инкрементный компилятор избегает расточительной перекомпиляции всех исходных файлов, где большая часть кода остается неизменной. Для большинства инкрементных компиляторов компиляция программы с небольшими изменениями в ее исходном коде обычно почти мгновенная. Можно сказать, что инкрементный компилятор снижает степень детализации традиционных единиц компиляции языка, сохраняя при этом семантику языка, так что компилятор может добавлять и заменять более мелкие части.
Многие инструменты программирования используют преимущества инкрементных компиляторов, чтобы предоставить разработчикам гораздо более интерактивную среду программирования. Нет ничего необычного в том, что инкрементный компилятор вызывается для каждого изменения исходного файла, так что разработчик почти немедленно информируется о любых ошибках компиляции, которые могут возникнуть в результате его изменений в коде. Эта схема, в отличие от традиционной компиляции, значительно сокращает цикл разработки программистов, поскольку им больше не нужно ждать долгого процесса компиляции, прежде чем они будут проинформированы об ошибках.
Обратной стороной этого типа инкрементного компилятора является то, что он не может легко оптимизировать код, который он компилирует, из-за локальности и ограниченного объема того, что изменяется. Обычно это не проблема, поскольку оптимизация обычно выполняется только в выпуске, инкрементный компилятор будет использоваться на протяжении всей разработки, а стандартный пакетный компилятор будет использоваться при выпуске.
В парадигме интерактивного программирования, например в литературе, связанной с Poplog, а интерактивный компилятор относится к компилятору, который фактически является частью системы времени выполнения исходного языка. Компилятор может быть вызван во время выполнения для некоторого исходного кода или структуры данных, управляемой программой, которая затем создает новый скомпилированный фрагмент программы, содержащий машинный код, который затем немедленно становится доступным для использования системой времени выполнения. Если вновь скомпилированный фрагмент заменяет предыдущую скомпилированную процедуру, старый будет сборщиком мусора. Эта схема допускает степень самомодифицируемого кода и требует языковых функций метапрограммирования. Возможность добавлять, удалять и удалять код во время работы известна как горячая замена. Некоторые платформы интерактивного программирования смешивают использование интерпретируемого и скомпилированного кода, чтобы создать иллюзию, что любые изменения в коде доступны для программы немедленно.