Domanda

Perché pitone compilare il sorgente in bytecode prima di interpretare?

Perché non interpretare dalla fonte direttamente?

È stato utile?

Soluzione

Quasi nessun interprete interpreta veramente codice direttamente , riga per riga - è semplicemente troppo inefficiente. Quasi tutti gli interpreti utilizzano una qualche rappresentazione intermedia che può essere eseguita facilmente. Inoltre, le piccole ottimizzazioni possono essere eseguiti su questo codice intermedio.

Python, inoltre memorizza il codice che ha un enorme vantaggio per la prossima volta questo codice viene eseguito: Python non ha bisogno di analizzare più il codice; analisi è la parte più lenta nel processo di compilazione. Così, una rappresentazione bytecode riduce esecuzione sovraccarico modo sostanziale.

Altri suggerimenti

Perché è possibile compilare un .pyc volta e interpretare da esso molte volte.

Quindi, se si sta eseguendo uno script molte volte hai solo il sovraccarico di analisi del codice sorgente di una volta.

A causa interpretting da bytecode direttamente è più veloce. Evita la necessità di fare lexing, per dirne una.

Re-lexing e l'analisi del codice sorgente più e più volte, piuttosto che farlo solo una volta (il più delle volte il primo import), sarebbe ovviamente uno spreco stupido e inutile sforzo.

Anche se c'è un piccolo aspetto di efficienza ad esso (è possibile memorizzare il bytecode su disco o in memoria), la sua maggior parte di ingegneria: permette di separare l'analisi da interpretare. Parser possono essere spesso creature brutte, piene di bordo-casi e di dover conformarsi alle regole esoteriche come usare la giusta quantità di lookahead e risolvere shift-ridurre i problemi. Al contrario, l'interpretazione è davvero semplice:. La sua solo una grande dichiarazione switch tramite codice operativo del bytecode

dubito molto che il motivo è la prestazione, anche se si tratti di un effetto collaterale positivo. Direi che è naturale pensare una macchina virtuale costruito intorno a un po 'di linguaggio assembly di alto livello sarebbe più pratico di trovare e sostituire il testo in qualche stringa di codice sorgente.

Modifica:

D'accordo, chiaramente, chi ha mai messo un -1 voto sulla mio post senza lasciare un commento ragionevole per spiegare sa molto poco di macchine virtuali (ambienti di runtime).

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript- virtual-macchina /

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