Mi viene in mente che non c'è molta differenza tra
$>python module.py
E
$>javac module.java
$>java module.class
Il precedente compila in un linguaggio intermedio (bytecode python) ed esegue il programma. Quest'ultimo rompe i passaggi, compilando prima il linguaggio intermedio (bytecode jvm) e quindi eseguendo su un'altra linea. In effetti posso riscrivere il python per rompere i due passaggi, come in questo domanda SO .
Sembra che le persone facciano un grosso problema sulla netta differenza tra i linguaggi compilati e quelli interpretati. Sembra che le linee siano completamente sfocate. Altri linguaggi interpretati popolari hanno caratteristiche simili. Php "compila" i propri opcode che possono essere memorizzati nella cache o memorizzati per un uso successivo. Anche Perl è compilato per qualcosa.
Quindi ... c'è davvero qualche differenza tra questi popolari linguaggi interpretati e i popolari linguaggi compilati che vengono compilati su macchine virtuali? Forse in un caso le VM sono in genere più residenti in memoria mentre con le lingue "interpretate" di solito hanno i loro runtime attivati? Eppure sembra che potrebbe essere facilmente cambiato.
Eppure sembra che ci sia ancora qualcosa di diverso. Se sono più o meno uguali, allora perché è la performance di Java / C # sembra avvicinarsi al C ++ mentre i linguaggi "interpretati" sono ancora in ordine di grandezza? Se sono tutti veramente bytecode in esecuzione su una VM e sono tutti uguali, perché la grande differenza nelle prestazioni?