C'è un punto di vista tecnico:
-
un compilatore è un processo che trasforma una vista di un programma in un'altra vista, abbassando il livello di astrazione
-
un interprete è un processo che esegue un programma, possibilmente prima trasformando la sorgente in un'altra vista, ma quella non avrà un livello di astrazione significativamente più basso.
C'è un punto di vista dell'utente:
-
un compilatore trasfor semplicemente il programma, non verrà eseguito lì fino a un altro passo
-
un interprete eseguirà il programma.
C'è una certa confusione nella differenza tra i due.
Un interprete come utente lo vede a volte usa tecniche di compilazione. In primo piano, compilando il programma sorgente in una rappresentazione intermedia che è di un livello di astrazione significativamente inferiore rispetto alla sorgente prima di interpretarla, magari andando anche a livello macchina ( carica e vai compilatore ). A volte rileva codice molto usato e compila solo quella parte o applica un'ottimizzazione speciale ( solo in tempo di compilazione ).
I compilatori non devono andare al linguaggio macchina. C è un obiettivo popolare per le lingue sperimentali. Un'altra scelta popolare è un codice intermedio più o meno simile a una macchina che deve essere interpretato da una macchina virtuale, a volte esponendo il codice byte in quanto tale, a volte unendo la macchina virtuale con il codice byte in un eseguibile (era il modo di l'implementazione Pascal più diffusa e diffusa ha funzionato).
La macchina virtuale è essa stessa un interprete, ma può applicare tecniche di compilazione come sopra scritto.
A volte i compilatori generano una descrizione più o meno simile a una macchina e delegano le vere generazioni di codice macchina al linker. Quella generazione può anche essere eseguita al momento dell'installazione (AS / 400 e successori il cui nome non riesco a ricordare nella serie? Zube è il più lungo durante il sistema che conosco che usa quel metodo).
Ora le tue domande:
- Un interprete fa lo stesso lavoro di qualcosa come la JVM, solo senza il codice byte?
A volte sì, a volte è il raggruppamento del compilatore java e della JVM.
- Per python l'interprete prende il codice di alto livello e lo traduce in codice macchina?
Esistono diversi interpreti e sistemi Python. Non penso che il più popolare passi al codice macchina.
- La macchina virtuale Java deve essere installata su una macchina affinché venga eseguita su di essa un programma java - è simile per python - se l'interprete è installato sulla macchina di destinazione, verrà eseguito il programma python?
L'implementazione Python più popolare è un interprete che deve essere installato.
- La JVM (& .net framework) è un efficace interprete di codice byte?
Sì, quelli che ho chiamato "interpreti di livello utente" possono applicare tecniche di compilazione vere per offrire prestazioni migliori.