En la ingeniería de software , la reorientación es un atributo de las herramientas de desarrollo de software que se han diseñado específicamente para generar código para más de una plataforma informática.
Compiladores
Un compilador retargetable es un compilador que ha sido diseñado para ser relativamente fácil de modificar para generar código para diferentes arquitecturas de conjuntos de instrucciones de CPU . La historia de esta idea se remonta a la década de 1950 cuando se propuso la UNCOL como el lenguaje intermedio universal. El compilador Pascal P es un ejemplo de un compilador retargetable temprano ampliamente utilizado.
El costo de producir un compilador retargetable que genere código de calidad similar a un compilador no retargetable (es decir, uno diseñado para producir solo código para un solo procesador) es más alto porque no es posible hacer uso de los detalles específicos de la CPU en todo fases de compilación. Los beneficios de un compilador reorientable es que el costo total de varias CPU es mucho más bajo que el costo combinado de muchos compiladores individuales que no son de destino.
Algunos compiladores reorientables, por ejemplo, GCC , se adaptaron y desarrollaron tanto que ahora incluyen soporte para muchas optimizaciones y detalles específicos de la máquina que la calidad del código a menudo supera la de los compiladores no reorientables en muchas CPU.
Un optimizador global de propósito general seguido de una optimización de mirilla específica de la máquina es una técnica de implementación comúnmente utilizada. [1] La optimización del código para algunos procesadores de alto rendimiento requiere un conocimiento detallado y específico de la arquitectura y cómo se ejecutan las instrucciones. A menos que los desarrolladores inviertan la gran cantidad de tiempo necesaria para escribir un generador de código específicamente para una arquitectura, las optimizaciones realizadas por un compilador retargetable solo serán las aplicables a las características genéricas del procesador.
Un compilador retargetable es una especie de compilador cruzado . A menudo (pero no siempre) un compilador retargetable es portátil (el propio compilador puede ejecutarse en varias CPU diferentes) y autohospedado .
Ejemplos de compiladores reorientables:
Descompilador
retdec (" Descompilador retargetable ") es un descompilador de código máquina retargetable de código abierto basado en LLVM . [ cita requerida ]
- El descompilador no se limita a ninguna arquitectura de destino, sistema operativo o formato de archivo ejecutable en particular:
- Formatos de archivo admitidos: ELF, PE, Mach-O, COFF, AR (archivo), Intel HEX y código de máquina sin procesar.
- Arquitecturas compatibles (actualmente solo de 32 bits): Intel x86, ARM, MIPS, PIC32 y PowerPC.
Ensambladores
Por el contrario, los ensambladores reorientables son capaces de generar archivos de objetos de diferentes formatos, lo que es útil para portar programas en lenguaje ensamblador a varios sistemas operativos que se ejecutan en la misma arquitectura de CPU (como Windows y Linux en la plataforma x86 ). NASM es uno de esos ensambladores.
Otras lecturas
- Un compilador de C retardable: diseño e implementación ( ISBN 0-8053-1670-1 )
Referencias
- ^ Davidson y Fraser; El diseño y la aplicación de un optimizador de mirilla reorientable; ToPLaS v2 (2) 191-202 (abril de 1980)
- ^ Rainer Leupers, Peter Marwedel. "Tecnología de compilador retardable para sistemas integrados" . 2001. ( ISBN 0-7923-7578-5 ) pág. 63.