Введение

Инкрементальный компилятор – это разновидность инкрементального вычисления, применяемая в области компиляции. Естественно, что в отличие от обычных компиляторов, выполняющих так называемую полную перекомпиляцию, то есть (пере)собирающих все модули программы, инкрементальный компилятор перекомпилирует только измененные части программы.

Императивная программа

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

Интерактивная программа

В парадигме интерактивного программирования, например, в литературе, связанной с Poplog, интерактивный компилятор – это компилятор, который фактически является частью среды выполнения исходного языка. Компилятор может быть вызван во время выполнения для некоторого исходного кода или структуры данных, управляемой программой, что приводит к созданию нового скомпилированного фрагмента программы, содержащего машинный код, который затем немедленно становится доступным для использования средой выполнения. Если вновь скомпилированный фрагмент заменяет предыдущий, старый фрагмент будет удален сборщиком мусора. Такая схема позволяет реализовать самомодифицирующийся код и требует возможностей метапрограммирования. Возможность добавления, удаления и изменения кода во время выполнения называется динамической заменой кода (hot swapping). Некоторые интерактивные платформы программирования комбинируют использование интерпретируемого и компилируемого кода, чтобы создать впечатление, что любые изменения в коде немедленно становятся доступными для программы.