Nella maggior parte dei casi, è possibile creare sia un compilatore nativo che un interprete per un linguaggio di programmazione. Il compilatore convertiva semplicemente il codice sorgente in codice macchina, e l'interprete eseguiva semplicemente il codice sorgente (o qualche IL prodotto da un compilatore).
Tuttavia, non sono sicuro delle lingue con Garbage Collection. Prendiamo Java per esempio.
Quando è stato progettato Java, era chiaro che i programmi Java sarebbero stati sempre eseguiti sulla JVM. E la JVM doveva contenere un meccanismo di garbage collection. Quindi, mentre progettava il linguaggio Java stesso, non c'era bisogno di distruttori e simili.
Se si implementasse un compilatore Java nativo , ciò significherebbe che il codice sorgente Java sarebbe stato compilato in codice macchina per essere eseguito sulla macchina stessa, non su una VM. E la macchina stessa non ha un meccanismo per la garbage collection.
In che modo qualcuno che implementa un compilatore nativo Java si occupa di questa situazione? È possibile creare un compilatore nativo per Java, dal momento che il design Java "conta" sulla raccolta automatica dei dati inutili? (E forse su alcune cose aggiuntive che la VM fa per il programma?)