Retargeting - Retargeting
Na engenharia de software , retargeting é um atributo das ferramentas de desenvolvimento de software que foram especificamente projetadas para gerar código para mais de uma plataforma de computação.
Compiladores
Um compilador retargetable é um compilador que foi projetado para ser relativamente fácil de modificar para gerar código para diferentes arquiteturas de conjunto de instruções da CPU . A história dessa ideia remonta à década de 1950, quando a UNCOL foi proposta como a linguagem intermediária universal. O compilador Pascal P é um exemplo de um compilador retargetable antigo e amplamente usado.
O custo de produção de um compilador retargetável que gera código de qualidade semelhante a um compilador não retargetável (ou seja, um projetado para produzir código apenas para um único processador) é mais alto porque não é possível fazer uso de detalhes específicos da CPU em todos fases de compilação. Os benefícios de um compilador retargetable é que o custo total sobre várias CPUs é muito menor do que o custo combinado de muitos compiladores individuais não segmentáveis.
Alguns compiladores retargetáveis, por exemplo, GCC , tornaram-se tão amplamente portados e desenvolvidos que agora incluem suporte para muitas otimizações e detalhes específicos de máquina que a qualidade do código freqüentemente supera a de compiladores não retargetáveis em muitas CPUs.
Um otimizador global de propósito geral seguido por uma otimização de olho mágico específico da máquina é uma técnica de implementação comumente usada. A otimização do código para alguns processadores de alto desempenho requer um conhecimento detalhado e específico da arquitetura e de como as instruções são executadas. A menos que os desenvolvedores invistam a grande quantidade de tempo necessária para escrever um gerador de código especificamente para uma arquitetura, as otimizações realizadas por um compilador retargetable serão apenas aquelas aplicáveis às características genéricas do processador.
Um compilador retargetable é um tipo de compilador cruzado . Freqüentemente (mas nem sempre), um compilador retargetable é portátil (o próprio compilador pode ser executado em várias CPUs diferentes) e auto-hospedado .
Exemplos de compiladores redirecionáveis:
- GCC
- ACK
- lcc
- VBCC
- Compilador C portátil
- SDCC
- LLVM
- O compilador Small-C
- MPG, o "gerador de microprograma eficiente independente de máquina"
Descompilador
retdec (" Retargetable Decompiler") é um descompilador de código de máquina retargetable de código aberto baseado em LLVM .
- O descompilador não está limitado a nenhuma arquitetura de destino, sistema operacional ou formato de arquivo executável em particular:
- Formatos de arquivo suportados: ELF, PE, Mach-O, COFF, AR (arquivo), Intel HEX e código de máquina bruto.
- Arquiteturas com suporte (atualmente apenas 32 bits): Intel x86, ARM, MIPS, PIC32 e PowerPC.
Montadores
Por outro lado, montadores retargetable são capazes de gerar arquivos de objetos de diferentes formatos, o que é útil para portar programas em linguagem assembly para vários sistemas operacionais executados na mesma arquitetura de CPU (como Windows e Linux na plataforma x86 ). NASM é um desses montadores.
Leitura adicional
- Um compilador C redirecionável: design e implementação ( ISBN 0-8053-1670-1 )