Введение

Время, в течение которого исходный код проверяется и преобразуется в машинный код компилятором.

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

Время компиляции/раннее связывание против времени выполнения

Определение модели исполнения происходит на этапе компиляции. Способ выполнения и выделения ресурсов определяются во время выполнения и зависят от динамики, возникающей во время выполнения.

Обзор

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