Implementazione di build incrementali [chiuso]

4

Sto lavorando su un linguaggio giocattolo.

Fino ad ora, sono stati compilati più file unendo gli AST di ciascun file e quindi eseguendo l'analisi semantica e la fase di generazione del codice sull'AST unito.

Ora mi piacerebbe implementare build incrementali. La mia lingua non ha file di intestazione. Pertanto, ho bisogno di mantenere la tabella dei simboli tra i diversi file di compilazione. Un modo sarebbe quello di creare un database SQLite che tiene traccia di tutti i simboli. Quando un file cambia, posso semplicemente aggiornare il database.

La mia domanda è:

Questa è una buona idea? Che cos'è lo "stato dell'arte" per la compilazione in modo incrementale in una lingua senza file di intestazione?

    
posta NSAddict 26.09.2015 - 20:02
fonte

2 risposte

3

Alcuni rimandano il controllo dei simboli fino al runtime. Questo evita il problema perché ogni singolo file sorgente può essere compilato senza riferimento a nessun altro file. Ovviamente, perdi anche il controllo del tempo di compilazione.

Alcuni convertono ciascun file sorgente in uno o più file compilati. Ad esempio, il compilatore java produrrà uno o più file .class per ogni file .java che gli chiederai di compilare. Se il compilatore deve fare riferimento ad altri file, può solo leggere i file .class dal disco.

Altri usano un singolo file per archiviare tutti i dati necessari. I dati relativi ai moduli che non hanno bisogno di essere ricompilati possono semplicemente essere letti dalla vecchia copia del file. Capisco che il compilatore C # di Microsoft ha fatto questo prima che il supporto per la modalità incrementale fosse rimosso.

    
risposta data 27.09.2015 - 00:15
fonte
-2

Fai come vuoi Probabilmente scoprirai che uno schema rigido ti ostacolerà il tuo modo di cambiarlo costantemente. Fondamentalmente stai serializzando lo stato interno della compilation in qualche modo e leggendolo in seguito.

    
risposta data 26.09.2015 - 21:25
fonte