2010-10-01 11 views
7

Dopo aver esaminato un paio di collegamenti, sono venuto a sapere che Perl esegue la compilazione e crea un codice byte intermedio e quindi interpreta il codice byte. La mia domanda è dove si trova quel codice byte?Dove memorizza Perl il suo codice byte intermedio?

Come in altre lingue come java, c possiamo vedere il codice dell'oggetto eseguibile della macchina dopo la compilazione. Sebbene Perl non crei il codice eseguibile della macchina, ma ci dovrebbe essere qualche posizione dove memorizza temporaneamente il codice byte.

risposta

18

Il risultato della compilazione viene archiviato in memoria come un albero di codici opachi, oppure in modalità optare in breve. Questa struttura viene percorsa dal runtime di perl per eseguire il programma.

Probabilmente troverai interessante il numero "Compiled Code" section of perlguts. Spiega molti dei dettagli sulla costruzione di un programma perl opzionale.

È anche possibile scrivere questo file su disco e caricarlo di nuovo in un altro processo perl, utilizzando la distribuzione B::C e il modulo ByteLoader in esso contenuto. Tuttavia, questa tecnica non funziona molto bene su molti programmi, quindi non è raccomandata in alcun modo.

+0

ti capita di sapere se undefing di uno spazio dei nomi abbandona i codici op? –

2

Lo memorizza come AST.

+2

Mentre c'è un lavoro entusiasmante, per lo più guidato da Gerard Goosen, che in realtà dà a perl un albero di sintassi astratto, al momento non ne ha uno. – rafl

+2

Inoltre, perché avresti bisogno di un AST per il codice byte? Un AST, dato che si tratta di _Syntax_, è rilevante solo per le lingue con sintassi reale, ad es. Codice sorgente Perl. – MSalters

+2

Questo vale solo per Perl 6. Non per Perl 5. Anche l'AST non è quello che * memorizza * il bytecode. È ciò che può essere usato per * generare * il bytecode. – dolmen

Problemi correlati