CPython è interprete di bytecode?
-
10-07-2019 - |
Domanda
Non capisco davvero il concetto di " interprete bytecode " nel contesto di CPython. Qualcuno può far luce su tutta l'immagine?
Significa che CPython compilerà ed eseguirà il file pyc (file bytecode?). Quindi quale compilare file py in file pyc? E in che modo Jython è diverso da CPython (tranne che sono implementati in lingue diverse).
Ho anche letto da qualche parte che Python è un'interpretazione in C ++. È corretto? E cosa significa?
Sono ancora molto nuovo su Python, quindi perdonami se faccio domande stupide ... Grazie mille!
Soluzione
CPython è l'implementazione di Python in C. È la prima implementazione, e ancora quella principale che la gente intende quando parlano di Python. Compila i file .py in file .pyc. I file .pyc contengono bytecode. L'implementazione di CPython interpreta anche questi bytecode. CPython non è scritto in C ++, è C.
La compilazione da .py a .pyc avviene in modo trasparente secondo necessità. Quando esegui un file .py, verrà prima compilato in un file .pyc se necessario, quindi il file .pyc verrà interpretato.
Jython è diverso perché (oltre ad essere implementato in Java anziché in C) compila i file .py in file .class in modo che possano essere eseguiti nella JVM.
Altri suggerimenti
Primo: il fatto che CPython sia un interprete di bytecode non dovrebbe interessarti 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 di Python e lo compila in codice byte Python, che è memorizzato nel file .pyc. Quindi esegue quel codice usando un interprete bytecode. Questo design separa l'analisi di Python dall'esecuzione, consentendo a entrambe le parti dell'interprete di essere più semplici.
Jython è solo la metà anteriore: legge l'origine Python e genera i 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. JVM ha uno dei motori JIT più avanzati al mondo, mentre l'interprete CPython è piuttosto semplice.
CPython è sia il compilatore bytecode che l'interprete (macchina virtuale).
Rileva automaticamente se non esiste alcun file pre-compilatore (.pyc) esistente, compila il codice e lo salva.