Ancora oggi sento (e leggo) che c'e' un fattore 10 nei tempi di esecuzione a favore dei compilati.
Purtroppo (anzi, fortunatamente) e' una bufala.
L'interpretazione preistorica funzionava in questo modo:
Nei compilati, invece, l'esecuzione puo' procedere senza interruzioni da parte di traduzioni:traduzione linea di codiceesecuzione lineatraduzione linea di codiceesecuzione linea...
esecuzione lineapoiche' la fase di traduzione e' effettuata (manualmente) prima dell'esecuzione.
esecuzione linea
...
In quell'era informatica, la differenza prestazionale nell'esecuzione tra i compilati e gli interpretati era notevole.
Ma poi i tempi sono cambiati!!
Successivamente, si sono fatti passi avanti dal punto di vista prestazionale nei meccanismi degli interpreti. Sintetizzando al massimo, una delle tecniche prevede la produzione di bytecode, il quale puo' essere direttamente eseguito. Dal punto di vista schematico, il processo e' simile ai linguaggi compilati, quindi in questo caso lo script e' tradotto con produzione di bytecode (una volta), ed esecuzione del bytecode (quante volte si vuole).
Lo stato dell'arte e' la just-in-time compilation, anche conosciuta come dynamic translation, che consiste in un approccio ibrido, idealmente suddivisa in 3 step:
- traduzione continua;
- riempimento di una cache con il tradotto;
- esecuzione del tradotto.
Esistono altre varianti, in particolare cito il pre-compiling. Tale tecnica dell'interprete prevede a run-time:
- il processo di compilazione del sorgente (in memoria);
- al termine dello step precedente, l'esecuzione del compilato.
Nessun commento:
Posta un commento