Che cosa è esattamente un obiettivo di compilazione?

12

Continuo a sentire il termine e tutte le ricerche su google mi portano agli articoli sui compilatori. Voglio solo capire che cosa significhi il termine compile target: |

AGGIORNAMENTO: per dare un contesto: ho sentito dire che il web assembly è un obiettivo di compilazione per altri linguaggi come C, C ++, Rust ecc.

    
posta ScionOfBytes 21.03.2017 - 12:56
fonte

3 risposte

15

I compilatori sono, in sostanza, traduttori che prendono input in una lingua e producono output in un'altra lingua. Ad esempio, il compilatore di Eiffel Software prende l'input della lingua Eiffel e produce C. GCC per Intel legge l'input in linguaggio C e produce l'assembly x86. L'assemblatore GAS per Intel accetta l'assembly x86 e produce codice oggetto x86. Tutte e tre queste cose sono tecnicamente compilatori.

Indipendentemente dal formato, l'input letto da un compilatore è chiamato source e l'output è chiamato target . Quest'ultimo termine è tratto da una delle sue definizioni, "risultato voluto".

La maggior parte dei compilatori è progettata per produrre assembly o codice oggetto per un particolare processore o architettura. Per questo motivo target viene spesso utilizzato per fare riferimento all'architettura stessa piuttosto che al formato di output.

L'obiettivo di un compilatore non deve essere uguale all'architettura in cui viene eseguito, e nei casi in cui ciò accade, il programma viene chiamato cross-compiler . (Ad esempio, GCC può essere creato per essere eseguito su sistemi x86 per compilare C nell'assembly ARM.)

Inoltre, esistono singoli compilatori in grado di produrre output per target diversi a seconda dell'input, come gli switch sulla riga di comando. Questi sono chiamati compilatori multi-target .

    
risposta data 21.03.2017 - 14:11
fonte
4

In traduzione, se la lingua è un linguaggio naturale come l'inglese, o artificiale come C, usiamo la terminologia source e target per parlare di input e output di un sistema di traduzione. Nella traduzione in linguaggio naturale, il sistema è il cervello umano competente in grado di tradurre tra due lingue. Nei linguaggi di programmazione, è un compilatore.

Quindi, source per un compilatore è il linguaggio di programmazione (C), mentre target è il bytecode (istruzioni a livello macchina). Spesso usiamo target nella compilazione perché diversi sistemi (architetture della CPU) hanno set di istruzioni differenti, ad es. ARM, MIPS, ecc. Il compilatore deve sapere quale set di istruzioni è il target, in modo che possa creare l'output corretto (bytecode).

    
risposta data 21.03.2017 - 22:52
fonte
0

WebAssemby è qualcosa di più recente e più grande, che converte il codice c / c ++ in formato binario.

  • WebAssembly si propone di eseguire a velocità nativa sfruttando l'hardware comune. È progettato per integrarsi con la piattaforma web.

Questo è il link in cui una delle applicazioni è visibile, quanto velocemente converte il semplice programma fattoriale in codice macchina.

Controlla questo animale, link

Puoi utilizzare questo programma di esempio per l'esecuzione in quel sito per vedere l'assemblaggio.

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Definisci un formato binario portatile, dimensionato e in grado di caricare in modo efficiente come target di compilazione che può essere compilato per l'esecuzione a velocità nativa sfruttando le funzionalità hardware comuni disponibili su una vasta gamma di piattaforme, inclusi dispositivi mobili e degli oggetti.

Alcune informazioni di base su host e destinazione, come il linguaggio di programmazione viene tradotto in 10101010.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC converte il codice C / C ++ in codice assembly. Uno strumento chiamato "assembler" converte il codice assembly in codice macchina e uno strumento chiamato "linker" collega più file di codice macchina in un singolo file eseguibile (.EXE in Windows). La maggior parte di questi compilatori ti consente di scrivere il codice assembler risultante in un file in modo da poter esaminare il codice dell'assemblatore o modificarlo.

  2. L'assemblatore e il linker fanno parte della catena di strumenti, il che significa che in genere vengono forniti insieme al compilatore.

  3. Alcuni compilatori (come Microsoft) convertono direttamente il codice C / C ++ in linguaggio macchina, quindi nessun assemblatore è più necessario. Molti di questi compilatori non sono in grado di creare codice assembler in modo da non poter scrivere il codice assemblatore in un file.

A proposito: ci sono anche compilatori (non per C / C ++, ma per altri linguaggi di programmazione) che creano direttamente un file .EXE quindi non è richiesto alcun linker.

WebAssembly: https://github.com/WebAssembly/design

    
risposta data 24.03.2017 - 21:19
fonte

Leggi altre domande sui tag