Che cos'è un compilatore batch?


28

Ho la seguente citazione dal corso del mio compilatore (nel contesto della colorazione dei grafici):

Poiché è lento, la colorazione dei grafici tende a essere utilizzata nei compilatori batch, mentre la scansione lineare tende a essere utilizzata nei compilatori JIT.

Non sono riuscito a trovare una definizione chiara online. Quindi, cosa rende un compilatore un compilatore batch?


Quella domanda è fuori tema qui. softwareengineering.stackexchange.com è un posto migliore per chiedere
Basile Starynkevitch,

Risposte:


42

Un compilatore JIT (Just-In-Time) compila il codice in fase di esecuzione, ovvero mentre il programma è in esecuzione. Pertanto, il costo della compilazione fa parte del tempo di esecuzione del programma e quindi dovrebbe essere ridotto al minimo.

L'opposto di questo è un compilatore anticipato (AOT) che è fondamentalmente sinonimo di "compilatore batch". Questo converte il codice sorgente in codice macchina e quindi viene distribuito solo il codice macchina. Pertanto, il compilatore può essere molto lento in quanto non influisce sul tempo di esecuzione del programma risultante.

Al giorno d'oggi, quando le persone dicono "compilatore", in genere significano un compilatore AOT. In effetti, il termine "compilatore AOT" ha iniziato a diventare popolare relativamente di recente quando le persone hanno iniziato a creare compilatori AOT per i linguaggi compilati JIT, in particolare JavaScript. Molte di queste lingue, ad esempio C #, vengono compilate in una lingua intermedia per una macchina virtuale che viene quindi compilata in JIT in codice macchina in fase di esecuzione. Il termine "compilatore AOT" ha la connotazione secondo cui il codice sorgente verrà compilato direttamente nel codice macchina, quindi non è richiesta alcuna forma di compilazione JIT in fase di esecuzione.

"Compilatore batch" è un po 'un termine arcaico a questo punto. Il vero contrasto con un compilatore batch quando il termine era popolare era un compilatore incrementale . La compilazione incrementale è spesso associata a linguaggi come Lisp in cui si disponeva di un REPL e si potrebbe richiedere in modo interattivo l'implementazione del linguaggio per compilare una funzione specifica. Se una funzione fosse eseguita la cui compilazione non era stata richiesta in precedenza, sarebbe in genere interpretata. Un compilatore batch, al contrario, ha compilato tutte le funzioni contemporaneamente, ovvero in un batch.


1
E ai vecchi tempi i compositori dove non venivano eseguiti in modo interattivo, dovevi inviare un lavoro a una coda batch per compilare il tuo programma
Neuromancer

E alcune implementazioni del linguaggio (awk, cpython di GNU e così via) compilano l'intero input in una rappresentazione interna come primo passo in fase di esecuzione, che mescola alcune delle proprietà descritte qui.
dmckee,

1
@dmckee quasi tutte le implementazioni del linguaggio, in realtà
user253751

Un'altra ambiguità: esistevano strumenti chiamati compilatori batch per i sistemi operativi MSDOS, questi file batch compilati in file eseguibili ....
rackandboneman

Naturalmente c'è sempre una rappresentazione interna. Ma a volte è un linguaggio a sé stante, come in Gcc, Llvm o .Net. Ciò è dovuto all'architettura front-end / middle / back-end, il front-end che trasforma il linguaggio (C, C ++, Java, fortran ..) in un linguaggio comune di livello inferiore, quindi vengono eseguiti gli algoritmi di ottimizzazione e infine questo codice ottimizzato nel linguaggio comune viene trasformato dal back-end in bytecode o assemblatore, eseguibile o libreria statica o dinamica.
riprende il

11

Il significato è implicito nella citazione che dai! Deriva dal termine di elaborazione elaborazione batch che viene utilizzato quando l'attività non viene eseguita in tempo reale, ma ha programmato l'esecuzione successiva da parte del sistema operativo quando il carico (spesso per attività in tempo reale) è inferiore.

Un compilatore batch è uno che esegue la compilazione quando un utente non è in attesa del risultato della compilazione. È uno che vorremmo dire, usando una terminologia più moderna, fatto in background.

Questo è il contrario di un JIT (Just-In-Time) che viene eseguito "live" nel momento esatto in cui è necessario senza il lusso di spendere il tempo extra per eseguire l'elaborazione in modo più approfondito.

La velocità più lenta della compilazione batch può essere illustrata da questo:

inserisci qui la descrizione dell'immagine

Fonte: https://xkcd.com/303/

O anche questo:

inserisci qui la descrizione dell'immagine

Fonte: http://dilbert.com/strip/2013-06-22

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.