Un compilador incremental es una especie de cálculo incremental aplicado al campo de la compilación . Naturalmente, mientras que los compiladores ordinarios realizan la construcción limpia , es decir, (re) compilan todos los módulos del programa, el compilador incremental recompila solo las partes de un programa que han sido modificadas.
Definición
Programación imperativa
En programación imperativa y desarrollo de software , un compilador incremental es aquel que cuando se invoca, toma solo 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 código de bytes ) que ya puede existir de compilaciones anteriores. . Al construir efectivamente sobre archivos de salida compilados previamente, el compilador incremental evita la recompilación inútil 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 mientras 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 proporcionar a los desarrolladores un entorno de programación mucho más interactivo. No es inusual que se invoque un compilador incremental para cada cambio de un archivo fuente, de modo que el desarrollador sea informado 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, porque ya no tendrían que esperar por un largo proceso de compilación antes de ser informado de 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. Por lo general, esto no es un problema, porque para la optimización generalmente solo se lleva a cabo en el lanzamiento , se usaría un compilador incremental durante todo el desarrollo y se usarí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 en realidad es parte del sistema de tiempo de ejecución del lenguaje fuente. El compilador se puede invocar en tiempo de ejecución en algún código fuente o estructura de datos administrada 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 ejecución. Si el fragmento recién compilado reemplaza un procedimiento compilado anterior, el antiguo será recolectado como basura . Este esquema permite cierto grado de modificación automática del código y requiere funciones de lenguaje de metaprogramación . La capacidad de agregar, eliminar y eliminar código mientras se ejecuta se conoce como intercambio en caliente . Algunas plataformas de programación interactiva combinan 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
- Compiladores incrementales para la compilación de lenguaje imperativo
- El PECAN Programming Environment Generator fue un compilador incremental, desarrollado por Steven P. Reiss a principios de la década de 1980. [3] [4]
- GNU Compiler Collection ha ramificado [5] su desarrollo con el proyecto IncrementalCompiler , concentrándose en proporcionar C / C ++ con un compilador incremental rápido.
- La plataforma Eclipse tiene un compilador incremental de Java incluido como parte del proyecto de herramientas de desarrollo de Java [6]
- El compilador IBM VisualAge C ++ 4.0 es un compilador incremental para C ++
- Embarcadero Delphi , anteriormente Borland Delphi
- La plataforma del compilador .NET (nombre en clave Roslyn) es un compilador incremental de código abierto para C # y Visual Basic .NET , y es el compilador predeterminado de Visual Studio 2015 en adelante.
- Óxido [7]
- Ir [8]
- Compiladores incrementales en entornos de programación interactivos y sistemas de ejecución
- Poplog (su lenguaje principal POP-11 y su predecesor POP-2 )
- Algunas versiones de Lisp :
- Banco de acero Common Lisp
- Universidad Carnegie Mellon Common Lisp
- Scieneer Common Lisp
- GNU CLISP
- Franz Allegro Common Lisp
- Algunas versiones de Scheme :
- Ikarus
- Esquema Chez
- La mayoría de las versiones de Prolog :
- SWI-Prolog , Yap Prolog , XSB , Ciao
- Versiones de ML :
- ML estándar de Nueva Jersey ( la sede de Bell Labs reside en Nueva Jersey )
- Poplog ML
- Adelante
- Kerridge KCML
- Ceilán de Red-Hat
- Compilador incremental para lenguajes funcionales
- OCaml
- La herramienta de compilación Gradle ha tenido una compilación incremental de Java desde la versión 2.1. [9]
Ver también
- Compilación dinámica
- # Software de intercambio en caliente
Referencias
- ^ [1] Archivado el 5de enero de 2008en Wayback Machine , un manual de enseñanza para Poplog
- ^ El artículo de Smith, Sloman y Gibson 1992 a continuación (ahora disponible en línea)
- ^ "Página de inicio de Steven P. Reiss" . Universidad de Brown. 9 de junio de 2011. Archivado desde el original el 10 de febrero de 2013 . Consultado el 8 de agosto de 2014 .
- ^ Popple, James (1987). Compilación Incremental y su Implementación en el Generador de Entorno de Programación PECAN (PDF) (Tesis de Honor). 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 .
- ^ [2] , el anuncio realizado al comienzo de la rama IncrementalCompiler de GCC
- ^ [3] , una descripción del componente principal de JDT
- ^ [4]
- ^ [5]
- ^ [6] , notas de la versión 2.1 de Gradle
enlaces externos
- Dr. Dobb's Journal sobre la creación de 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