Compilador incremental

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.

Definición

Programación imperativa

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.

Programación interactiva

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.

Lista de compiladores incrementales

Lenguajes imperativos y funcionales
Entornos interactivos y sistemas de ejecución

Véase también

Referencias

  1. ^ http://www.cs.bham.ac.uk/research/projects/poplog/primer/node14.html Archivado el 5 de enero de 2008 en Wayback Machine , introducción didáctica a Poplog
  2. ^ El artículo de Smith, Sloman y Gibson de 1992 que aparece a continuación (ahora disponible en línea)
  3. ^ "Steven P. Reiss Home Page". Universidad Brown. 9 de junio de 2011. Archivado desde el original el 10 de febrero de 2013. Consultado el 8 de agosto de 2014 .
  4. ^ Popple, James (1987). Compilación incremental y su implementación en el generador de entornos de programación PECAN (PDF) (tesis de grado). Universidad Nacional de Australia. Archivado (PDF) desde el original el 15 de agosto de 2014. Consultado el 8 de marzo de 2013 .URL alternativa También disponible en Google Books .
  5. ^ https://gcc.gnu.org/ml/gcc/2007-07/msg00496.html , el anuncio que dio inicio a la rama IncrementalCompiler de GCC
  6. ^ http://www.eclipse.org/jdt/core/index.php , una descripción del componente principal de JDT
  7. ^ https://docs.gradle.org/2.1/release-notes.html , notas de la versión 2.1 de Gradle
  8. ^ "Anuncio de Rust 1.24 | Blog de Rust".
  9. ^ "Notas de la versión de Go 1.10: el lenguaje de programación Go".
  • Diario del Dr. Dobb sobre cómo crear un compilador incremental de C++
  • R. Smith, A. Sloman y J. Gibson, Soporte de máquina virtual de dos niveles de POPLOG para lenguajes interactivos, en Research Directions in Cognitive Science Volume 5: Artificial Intelligence, Eds. D. Sleeman y N. Bernsen, Lawrence Erlbaum, 1992, págs. 203-231
Obtenido de "https://es.wikipedia.org/w/index.php?title=Compilador_incremental&oldid=1159385236"