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:

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 )

Referências

links externos