Un compilador incremental es un tipo de computación incremental aplicada al campo de la compilación . Como es lógico, mientras que los compiladores ordinarios realizan una compilación limpia , es decir, (re)construyen todos los módulos del programa, un compilador incremental solo recompila las partes modificadas del programa.
Definición
Programación imperativa
En la programación imperativa y el desarrollo de software , la compilación incremental toma solo los cambios de un conjunto conocido de archivos fuente y actualiza los archivos de salida correspondientes (en el lenguaje de destino del compilador, a menudo bytecode ) que ya puedan existir de compilaciones anteriores. Al construir sobre archivos de salida previamente compilados, un compilador incremental evita la recompilación innecesaria 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, manteniendo su semántica , 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. Es habitual que se invoque un compilador incremental con cada modificación de un archivo fuente, de modo que el desarrollador recibe información casi inmediata sobre cualquier error de compilación que pueda surgir como resultado de sus cambios en el código. Este sistema, a diferencia de la compilación tradicional, acorta significativamente el ciclo de desarrollo del programador, ya que no tiene que esperar a que finalice un largo proceso de compilación para ser informado de 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 los cambios. Esto no suele ser un problema, ya que la optimización generalmente solo se realiza en el lanzamiento ; un compilador incremental se usaría durante todo el desarrollo y un compilador por lotes estándar se usaría en el lanzamiento.
Programación interactiva
En el paradigma de programación interactiva , por ejemplo en la literatura relacionada con Poplog , [ 1 ] [ 2 ] un compilador interactivo se refiere a un compilador que forma parte del sistema de ejecución del lenguaje fuente. El compilador puede invocarse en tiempo de ejecución sobre algún código fuente o estructura de datos gestionada por el programa, lo que produce un nuevo fragmento de programa compilado que contiene código máquina y que 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 por el recolector de basura . Este esquema permite cierto grado de automodificación del código y requiere características de lenguaje de metaprogramación . La capacidad de agregar, eliminar y borrar código durante la ejecución 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 cualquier cambio en el código es accesible al programa de inmediato.
Lista de compiladores incrementales
- Lenguajes imperativos y funcionales
- El generador de entornos de programación PECAN fue un compilador incremental, desarrollado por Steven P. Reiss a principios de la década de 1980. [ 3 ] [ 4 ]
- GNU Compiler Collection se ha ramificado [ 5 ] en su desarrollo con el proyecto IncrementalCompiler , concentrándose en proporcionar a C / C++ un compilador incremental rápido.
- La plataforma Eclipse ha incluido un compilador incremental para Java como parte del proyecto Java Development Tools [ 6 ].
- La herramienta de compilación Gradle ha admitido la compilación incremental de Java desde la versión 2.1. [ 7 ]
- Compilador IBM VisualAge C++ 4.0
- Embarcadero Delphi
- Plataforma de compilación .NET ( C# y Visual Basic .NET )
- Óxido [ 8 ]
- Ir [ 9 ]
- Adelante
- Ceilán
- OCaml
- GNAT , el compilador GNU Ada
- Objeto PTCAda
- Entornos interactivos y sistemas de ejecución
Véase también
Referencias
- ↑ http://www.cs.bham.ac.uk/research/projects/poplog/primer/node14.html Archivado el 5 de enero de 2008 en Wayback Machine , introducción a Poplog
- ↑ El artículo de Smith, Sloman y Gibson de 1992 que aparece a continuación (ahora disponible en línea)
- ↑ "Página principal de Steven P. Reiss" . Universidad de Brown. 9 de junio de 2011. Archivado del 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 entornos de programación PECAN (PDF) (tesis de licenciatura). Universidad Nacional Australiana. Archivado (PDF) del original el 15 de agosto de 2014. Recuperado el 8 de marzo de 2013 .URL alternativa También disponible en Google Libros .
- ↑ https://gcc.gnu.org/ml/gcc/2007-07/msg00496.html , el anuncio realizado al inicio de la rama IncrementalCompiler de GCC
- ↑ http://www.eclipse.org/jdt/core/index.php , una descripción del componente principal de JDT
- ↑ https://docs.gradle.org/2.1/release-notes.html , notas de la versión 2.1 de Gradle
- ↑ "Anuncio de Rust 1.24 | Blog de Rust" .
- ↑ "Notas de la versión 1.10 de Go: el lenguaje de programación Go" .
Enlaces externos
- El diario del Dr. Dobb 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 Volumen 5: Inteligencia Artificial , Eds. D. Sleeman y N. Bernsen, Lawrence Erlbaum, 1992, pp. 203–231
- Compiladores
- computación incremental