Questa è solo una meraviglia che ho avuto durante la lettura di linguaggi interpretati e compilati.
Ruby è senza dubbio un linguaggio interpretato poiché il codice sorgente viene elaborato da un interprete nel punto di esecuzione.
Al contrario, C è un linguaggio compilato, poiché è necessario compilare prima il codice sorgente in base alla macchina e quindi eseguirlo. Questo risultato è un'esecuzione molto più veloce.
Ora in arrivo su Python :
- Un codice python ( somefile.py ) quando importato crea un file ( somefile.pyc ) nella stessa directory. Supponiamo che l'importazione avvenga in una shell python o in un modulo django. Dopo l'importazione cambio un po 'il codice ed eseguo di nuovo le funzioni importate per scoprire che sta ancora eseguendo il vecchio codice. Ciò suggerisce che i file * .pyc sono file Python compilati simili all'eseguibile creato dopo la compilazione di un file C, sebbene non sia possibile eseguire direttamente il file * .pyc.
- Quando il file python (somefile.py) viene eseguito direttamente (./somefile.py o python somefile.py) non viene creato alcun file .pyc e il codice viene eseguito come indica un comportamento interpretato.
Questi suggeriscono che un codice Python viene compilato ogni volta che viene importato in un nuovo processo per creare un .pyc mentre viene interpretato quando eseguito direttamente.
Quindi quale tipo di linguaggio dovrei considerarlo? Interpretato o compilato? E come si confronta la sua efficienza con i linguaggi interpretati e compilati?
Secondo la pagina Lingue interpretate della wiki , è elencata come una lingua compilata in Virtual Machine Code, cosa si intende con questo?
RUN
. Era come se tu avessi un compilatore che eseguiva il passaggio di lexing e quindi emettesse un flusso di token che dovevano essere replicati ogni volta che il programma veniva eseguito. Non è come la moderna compilazione di bytecode come, diciamo javac
, fatta che comprende lex, analisi e ottimizzazione.