Tiempo de compilación
En informática, el tiempo de compilación describe la ventana de tiempo durante la cual se compila un programa de computadora. El término se utiliza como adjetivo para describir conceptos relacionados con el contexto de compilación del programa, a diferencia de los conceptos relacionados con el contexto de ejecución del programa (tiempo de ejecución). Por ejemplo, los requisitos de tiempo de compilación son requisitos del lenguaje de programación que debe cumplir el código fuente antes de la compilación y las propiedades de tiempo de compilación son propiedades del programa sobre las que se puede razonar durante la compilación. El tiempo real que se tarda en compilar un programa suele denominarse tiempo de compilación.
Tiempo de compilación/enlace anticipado frente a tiempo de ejecución
La determinación del modelo de ejecución se ha establecido durante la etapa de tiempo de compilación. Tiempo de ejecución: el método de ejecución y asignación se ha establecido durante el tiempo de ejecución y se basa en la dinámica del tiempo de ejecución.
Visión general
La mayoría de los compiladores tienen al menos las siguientes fases del compilador (que, por lo tanto, ocurren en tiempo de compilación): análisis de sintaxis, análisis semántico y generación de código. Durante las fases de optimización, las expresiones constantes en el código fuente también se pueden evaluar en tiempo de compilación mediante la ejecución en tiempo de compilación, que reduce las expresiones constantes a un solo valor. Esto no es necesario para la corrección, pero mejora el rendimiento del programa durante el tiempo de ejecución.
Las definiciones del lenguaje de programación generalmente especifican los requisitos de tiempo de compilación que el código fuente debe cumplir para compilarse correctamente. Por ejemplo, los idiomas pueden estipular que se puede deducir la cantidad de almacenamiento requerido por tipos y variables.
Las propiedades de un programa sobre las que se puede razonar en tiempo de compilación incluyen comprobaciones de rango (p. ej., demostrar que un índice de matriz no excederá los límites de la matriz), libertad de punto muerto en lenguajes concurrentes o tiempos (p. ej., demostrar que una secuencia de código toma no más de una cantidad de tiempo asignada).
El tiempo de compilación ocurre antes del tiempo de enlace (cuando la salida de uno o más archivos compilados se unen) y el tiempo de ejecución (cuando se ejecuta un programa). Aunque en el caso de la compilación dinámica, las transformaciones finales a lenguaje máquina suceden en tiempo de ejecución.
Existe una compensación entre el tiempo de compilación y el tiempo de enlace en el sentido de que muchas operaciones de tiempo de compilación se pueden diferir al tiempo de enlace sin incurrir en costos de tiempo de ejecución.