Nei miei corsi di progettazione di compilatori, ho imparato e ho lavorato con una chiara definizione accademica di un interprete e di un compilatore, con un interprete che è
a program Pi from a language M capable of taking a program i from a language I and an input and executing i with the given input and the correct semantics for I on a machine capable of running programs from M
e un compilatore essendo
a program Pc that, when given a valid program i from a language I as an input, produces a semantically equivalent program o in a language O
Questa definizione metterebbe chiaramente la normale esecuzione del bytecode Java da parte di una JVM nel dominio dell'interpretazione, indipendentemente dalla quantità di compilazione JIT. (Naturalmente, Java è anche compilato prima, dal codice Java al codice bytecode Java.) Ho incontrato pareri nelle discussioni su questo sito che affermano chiaramente e con veemenza il contrario, vale a dire che le cose in esecuzione di Java Bytecode sono compilatori. Dato che sto per fare il salto dagli studi universitari all'industria, sono un po 'confuso qui:
La suddetta definizione di interpreti è falsa dal punto di vista delle persone del settore in generale? O è solo falso per le persone Java? La visione di Java come linguaggio completamente compilato è una visione alternativa, ma minoritaria? O solo pochi matti?
(PS: Si prega di non spostare questo in cstheory. Ho deliberatamente posto questa domanda poiché mi piacerebbe davvero avere il punto di vista dell'industria professionale, non della comunità accademica.)