Troppe semantiche e dichiarazioni basate sull'opinione.
Primo: C# non è una lingua interpretata; CLR e JVM sono considerati "runtime" o "middleware", ma lo stesso nome si applica a cose come Perl. Ciò crea molta confusione tra le persone interessate ai nomi.
Il termine "Interprete" che fa riferimento a un runtime generalmente indica che il codice esistente interpreta un codice non nativo. Esistono due grandi paradigmi: l'analisi legge il codice sorgente non elaborato e intraprende azioni logiche; l'esecuzione bytecode compila il codice prima di una rappresentazione binaria non nativa, che richiede un numero di cicli CPU inferiore per l'interpretazione.
Java originariamente compilato in bytecode, quindi sottoposto a un interprete; ora, la JVM legge il bytecode e just-in-time lo compila nel codice nativo. CIL fa lo stesso: CLR utilizza la compilazione just-in-time nel codice nativo.
Considerare tutte le combinazioni di codice sorgente in esecuzione, bytecode in esecuzione, compilazione in compilazione nativa, just-in-time, esecuzione di codice sorgente tramite un compilatore in modalità just-in-time nativa e così via. La semantica del fatto che una lingua sia compilata o interpretata diventa priva di significato.
Ad esempio: molti linguaggi interpretati utilizzano la compilazione bytecode just-in-time. C# si compila in CIL, che JIT compila in nativo; al contrario, Perl compila immediatamente uno script in un bytecode, quindi esegue questo bytecode tramite un interprete. Puoi eseguire solo un assembly C# in formato bytecode CIL; puoi eseguire uno script Perl solo in formato codice sorgente raw.
I compilatori just-in-time eseguono anche una grande quantità di strumentazione esterna e interna. Il runtime tiene traccia dell'esecuzione di varie funzioni, quindi regola il layout del codice per ottimizzare i rami e l'organizzazione del codice per il suo particolare flusso di esecuzione. Ciò significa che il codice JIT può essere eseguito più velocemente del codice compilato nativamente (come C++ è in genere, o come C# eseguito attraverso IL2CPP), perché la JIT adatta la sua strategia di ottimizzazione al caso di esecuzione effettivo del codice durante la sua esecuzione.
Benvenuti nel mondo della programmazione per computer. Abbiamo deciso di renderlo estremamente complicato, quindi associare nomi non descrittivi a tutto. Lo scopo è quello di creare flamewars sulla definizione di parole che non hanno alcun significato pratico.
possibile duplicato del [è il C# interpretati o Compilato?] (Http://stackoverflow.com/questions/2777242/is-c-sharp-interpreted-or-compiled) –