Continuo ouvindo o termo e todas as pesquisas no Google me levam a artigos sobre compiladores. Eu só quero entender o que o termo destino de compilação significa: |
UPDATE: Para dar um contexto: ouvi dizer que o assembly da web é um destino de compilação para outras linguagens como C, C ++, Rust etc.
Respostas:
Compiladores são, em essência, tradutores que recebem informações em um idioma e produzem resultados em outro. Por exemplo, o compilador da Eiffel Software pega entrada no idioma Eiffel e produz C. GCC for Intel lê entrada no idioma C e produz montagem x86. O montador de GAS da Intel faz a montagem x86 e produz o código do objeto x86. Todas essas três coisas são tecnicamente compiladores.
Independentemente do formato, a entrada lida por um compilador é chamada de origem e a saída é chamada de destino . O último termo é retirado de uma de suas definições, "resultado pretendido".
A maioria dos compiladores é projetada para produzir código de montagem ou objeto para um processador ou arquitetura em particular. Por esse motivo , o destino é frequentemente usado para se referir à própria arquitetura, e não ao formato de saída.
O destino de um compilador não precisa ser o mesmo da arquitetura em que é executado e, nos casos em que isso acontece, o programa é chamado de de compilador cruzado . (Por exemplo, o GCC pode ser criado para executar em sistemas x86 para compilar C no assembly ARM.)
Além disso, existem compiladores únicos capazes de produzir saída para diferentes destinos, dependendo da entrada, como opções na linha de comando. Esses são chamados de compiladores de vários destinos .
fonte
Na tradução, seja um idioma natural como o inglês ou artificial como C, usamos a fonte e o destino da terminologia para falar sobre a entrada e saída de um sistema de tradução. Na tradução para o idioma natural, o sistema é o cérebro humano competente capaz de traduzir entre duas línguas. Nas linguagens de programação, é um compilador.
Portanto, a fonte de um compilador é a linguagem de programação (C), enquanto o destino é o bytecode (instruções no nível da máquina). Geralmente usamos o target na compilação porque sistemas diferentes (arquiteturas de CPU) possuem conjuntos de instruções diferentes, por exemplo, ARM, MIPS, etc. O compilador precisa saber qual conjunto de instruções é o destino, para que possa criar a saída correta (bytecode).
fonte
O WebAssemby é algo mais recente e melhor, que converte o código c / c ++ em formato binário.
Aqui está o link onde um dos aplicativos que você pode ver, com que rapidez ele converte o simples programa fatorial em código de máquina.
Verifique esta besta, https://godbolt.org/
Você pode usar este programa de amostra para executar nesse site para ver a montagem.
Algumas informações básicas sobre host e destino, como a linguagem de programação é traduzida para 10101010.
O GCC converte o código C / C ++ em código de montagem. Uma ferramenta chamada "assembler" converte o código de montagem em código de máquina e uma ferramenta chamada "linker" conecta vários arquivos de código de máquina em um único arquivo executável (.EXE no Windows). A maioria desses compiladores permite gravar o código do assembler resultante em um arquivo, para que você possa ver o código do assembler ou modificá-lo.
O montador e o vinculador fazem parte da cadeia de ferramentas, o que significa que eles geralmente são entregues juntamente com o compilador.
No entanto, alguns compiladores (como a Microsoft) convertem diretamente o código C / C ++ em linguagem de máquina, para que não seja necessário mais montador. Muitos desses compiladores não conseguem criar código assembler, portanto você não pode gravar o código assembler em um arquivo.
A propósito: Existem até compiladores (não para C / C ++, mas para outras linguagens de programação) que criam diretamente um arquivo .exe, portanto, nenhum vinculador é necessário.
fonte