2009-10-29 7 views
9

Non ho davvero capito il concetto di "interprete bytecode" nel contesto di CPython. Qualcuno può far luce su tutta l'immagine?CPython è l'interprete bytecode?

Significa che CPython compilerà ed eseguirà il file pyc (file bytecode?). Quindi cosa compila il file py in file pyc? E come Jython è diverso da CPython (tranne che sono implementati in lingue diverse).

Ho anche letto da qualche parte che Python è l'interpretazione in C++. È corretto? E cosa significa?

Sono ancora molto nuovo per Python, quindi perdonami se ti faccio domande stupide ... Grazie mille!

risposta

12

CPython è l'implementazione di Python in C. È la prima implementazione, e ancora la principale che le persone intendono quando parlano di Python. Compila i file .py in file .pyc. I file .pyc contengono bytecode. L'implementazione CPython interpreta anche questi bytecode. CPython non è scritto in C++, è C.

La compilazione da .py a .pyc avviene in modo trasparente secondo necessità. Quando si esegue un file .py, esso verrà prima compilato in un file .pyc se necessario, quindi il file .pyc verrà interpretato.

Jython è diverso perché (oltre a essere implementato in Java anziché in C) compila i file .py in file .class in modo che possano essere eseguiti nella JVM.

+0

Jython converte il codice Python in Java e quindi viene compilato in bytecode Jave? – Nope

+0

Non so se produce Java come modulo intermedio. –

+3

AFAIK Jython può produrre Java come modulo intermedio, se richiesto, ma in genere produce solo bytecode Java. – MAK

7

CPython è sia il compilatore bytecode, sia l'interprete (macchina virtuale).

Rileva automaticamente se non esiste alcun file pre-compilatore (.pyc), compila il codice e lo salva.

10

Primo: il fatto che CPython sia un interprete bytecode non dovrebbe avere importanza per te come utente di python. Vai avanti e scrivi il codice, e non preoccuparti di come si è trasformato in azione.

Quindi, per rispondere alla tua domanda e soddisfare la tua curiosità, ecco cosa succede: CPython legge il codice sorgente Python e lo compila nel codice byte python, che è memorizzato nel file .pyc. Quindi esegue quel codice usando un interprete bytecode. Questo disegno separa l'analisi di python dall'esecuzione, consentendo a entrambe le parti dell'interprete di essere più semplici.

Jython è solo la metà anteriore - legge Python source e genera bytecode Java, che vengono quindi interpretati dalla JVM. È la stessa architettura di CPython, con due differenze degne di nota: una: il bytecode java è standardizzato e documentato, mentre il bytecode CPython è considerato interno a python e può cambiare in qualsiasi momento. Due: la JVM è molto più complicata dell'interprete CPython. La JVM ha uno dei motori JIT più avanzati al mondo, mentre l'interprete CPython è piuttosto semplice.

+1

Anche se in ritardo, ma questa è una spiegazione molto dettagliata. Grazie! – huy