Domanda

Dopo oltre un decennio di C / C ++ codifica, ho notato il seguente schema - molto buoni programmatori tendono ad avere una conoscenza dettagliata delle interiora del compilatore.

Sono un ragionevolmente buon programmatore, e ho una collezione ad hoc di compilatore "superstizioni", quindi mi piacerebbe riavviare le mie conoscenze e iniziare dalle basi.

Qualcuno può raccomandare link a risorse online o libri preferiti? Sono particolarmente interessato in C / C ++ compilazione, l'ottimizzazione, GCC e LLVM.

È stato utile?

Soluzione

Inizia con il libro del drago .... (stress in modo più sull'ottimizzazione del codice e generazione di codice)

Vai su scrittura di un compilatore giocattolo per un linguaggio di programmazione educativa come decaffeinato o cool .., è possibile utilizzare i generatori di parser (lex e yacc) per il front-end (per rendere la vita più facile e concentrarsi su più roba imp) ... .

Poi leggi interni gcc libro insieme con la navigazione del codice sorgente gcc.

Altri suggerimenti

Compiler testo sono buone, ma sono un po 'pesante per l'insegnamento da soli. Jack Crenshaw ha un "Libro", che è stata una serie di articoli è possibile scaricare e leggere chiamare "Consente di creare un compilatore." Si segue una metodologia "imparare facendo", che è grande se non hai nulla di prendere lezioni formali in materia, o sono passati troppi anni da quando prese (che è il mio caso). Essa detiene la mano e ti conduce attraverso scrivendo un compilatore invece di smacking in giro con lambda calcolo e questioni teoriche profonde che solo il mondo accademico si preoccupa. E 'stato un buon modo per suscitare quelle cellule cerebrali che avevano solo un ricordo sfocato di scrivendo qualcosa sul Vax (sì, è proprio un VAX!) Molte molte lune fa a scuola. E 'scritto molto colloquiale e facile da sedersi e leggere, a differenza di molti libri di testo, che richiedono diversi vasi di caffè appena a superare il primo capitolo. Una volta che hai una base per comprendere poi più di scrittura tradizionale, come il libro Drago sono grandi riferimenti per espandere sulla vostra comprensione. (E personali mi piacciono le versioni albero morto, ho stampato Jack, è molto più facile da leggere in una posizione comoda che su un computer portatile. E i lettori di ebook sono troppo costosi per qualcosa che in realtà non sentire come si sta leggendo un eppure vero e proprio libro.)

Quello che alcuni potrebbero chiamare un "rovescio della medaglia" è che è scritto in Pascal, ma ho pensato che appena mi ha fatto pensare a questo proposito più che se qualcuno mi avesse dato un programma di lavoro C per iniziare. Appart da che è stato scritto con il 68000 in mente, che viene utilizzato solo in sistemi embedded in questo momento punto. Ancora una volta per me questo non era un problema, sapevo 68000 asm e 68000 asm è più facile da leggere rispetto qualche altro asm.

Se si vuole edizione morto-albero, prova a L'arte del Compiler Design: Theory and Practice .

Come notato da Pete Eddy, il tutorial di Jack Crenshaw è eccellente per i neofiti. Ma se volete vedere come un vero e proprio, compilatore di produzione C funziona -uno che era progettato di brillanti ingegneri, invece di gettare creato da codice il muro fino a quando qualcosa stuck- procuratevi una copia di Fraser e Hanson un reindirizzabile C Compiler: Progettazione e Realizzazione , che contiene il codice sorgente per il lcc compilatore. Dichiarazioni di progettazione e realizzazione sono mescolati con il codice. Non è un primo libro per un principiante, ma sarà rimborsare un attento studio, e si può ottenere una copia usata per $ 35.

Per un blurb più su lcc, vedere Compile C più veloce su Linux .

La pagina web LCC ha anche collegamenti a una serie di buoni libri di testo. Non so di un testo introduttivo che mi piace molto, però.

P.S. Mi dispiace che hanno praticamente derubati a Uni.

vedere il codice sorgente OTCC di Fabrice Bellard

http://bellard.org/otcc/

A seconda di cosa esattamente vuoi sapere, si dovrebbe avere uno sguardo a tubi e modello del filtro, perché per quanto so che questo (o qualcosa di simile) viene utilizzato in un sacco di compilatori negli ultimi anni.

Quando la mia conoscenza compilatore non è troppo obsoleto funziona in questo modo:

Parse codice sorgente nella rappresentazione simbolica

Clean up rappresentazione simbolica, fare un po 'la normalizzazione

L'ottimizzazione della struttura simbolica in base a determinate regole

scrivere codice eseguibile sulla base di albero simbolico

delle dipendenze dei corsi, ecc devono essere risolti anche.

E, naturalmente, avere uno sguardo a gcc o javac codice sorgente può aiutare a ottenere comprensione più dettagliata.

Può anche essere utile per raccogliere e leggere il codice sorgente di un compilatore. Dubito che il GCC è la migliore scelta, dal momento che è gravata con la piena compatibilità con più di 20 anni di evoluzione del linguaggio. Ma sono anche sicuro che una lettura della sua fonte, guidato da uno dei manuali di riferimento interni, sarebbe educativo.

mi piacerebbe seriamente in considerazione guardando il sorgente di un linguaggio di scripting che viene compilato internamente per un bytecode per una macchina virtuale. Diverse lingue si adattano a questa descrizione, ma vorrei iniziare con Lua . Il linguaggio è piccola, e la VM è romanzo. Il codice sorgente è anche piccola e le punte ho guardato sono stato molto chiaro, anche se leggermente commentato.

avere uno sguardo su Kaleidoscope . È possibile scrivere il proprio compilatore in pochi giorni con LLVM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top