Es posible que este artículo contenga investigaciones originales . ( Noviembre de 2016 ) |
Un compilador incremental es un tipo de computación incremental aplicada al campo de la compilación . Naturalmente, mientras que los compiladores ordinarios realizan una llamada compilación limpia , es decir, (re)compilan todos los módulos del programa, un compilador incremental recompila solo las partes modificadas de un programa.
En la programación imperativa y el desarrollo de software , la compilación incremental solo toma los cambios de un conjunto conocido de archivos fuente y actualiza cualquier archivo de salida correspondiente (en el lenguaje de destino del compilador, a menudo bytecode ) que ya pueda existir de compilaciones anteriores. Al construir de manera efectiva sobre archivos de salida compilados previamente, un compilador incremental evita la inútil recompilación de archivos fuente completos, donde la mayor parte del código permanece sin cambios. Para la mayoría de los compiladores incrementales, compilar un programa con pequeños cambios en su código fuente suele ser casi instantáneo. Se puede decir que un compilador incremental reduce la granularidad de las unidades de compilación tradicionales de un lenguaje al tiempo que mantiene la semántica del lenguaje , de modo que el compilador puede agregar y reemplazar partes más pequeñas.
Muchas herramientas de programación aprovechan los compiladores incrementales para ofrecer a los desarrolladores un entorno de programación mucho más interactivo. No es raro que se invoque un compilador incremental cada vez que se realice un cambio en un archivo fuente, de modo que el desarrollador reciba información casi de inmediato sobre cualquier error de compilación que pueda surgir como resultado de sus cambios en el código. Este esquema, en contraste con la compilación tradicional, acorta significativamente el ciclo de desarrollo de un programador, ya que ya no tendría que esperar un largo proceso de compilación antes de recibir información sobre los errores.
Una desventaja de este tipo de compilador incremental es que no puede optimizar fácilmente el código que compila, debido a la localidad y al alcance limitado de lo que se cambia. Esto no suele ser un problema, porque, dado que la optimización normalmente solo se lleva a cabo en el lanzamiento , se utilizaría un compilador incremental durante todo el desarrollo y se utilizaría un compilador por lotes estándar en el lanzamiento.
En el paradigma de programación interactiva , por ejemplo en la literatura relacionada con Poplog , [1] y [2] un compilador interactivo se refiere a un compilador que es en realidad una parte del sistema de tiempo de ejecución del lenguaje fuente. El compilador puede ser invocado en tiempo de ejecución en algún código fuente o estructura de datos gestionada por el programa, que luego produce un nuevo fragmento de programa compilado que contiene código de máquina que luego está inmediatamente disponible para su uso por el sistema de tiempo de ejecución. Si el fragmento recién compilado reemplaza un procedimiento compilado anterior, el antiguo será recolectado como basura . Este esquema permite un grado de código automodificable y requiere características del lenguaje de metaprogramación . La capacidad de agregar, eliminar y borrar código mientras se ejecuta se conoce como intercambio en caliente . Algunas plataformas de programación interactiva mezclan el uso de código interpretado y compilado para lograr la ilusión de que el programa puede acceder inmediatamente a cualquier cambio en el código.