La domanda è confusa, poiché C e C ++ sono linguaggi , mentre JVM è una macchina virtuale e .Net è una piattaforma . Scala potrebbe essere implementato in C o C ++ e potrebbe generare codice macchina anziché bytecode per una macchina virtuale.
Rispondere alla domanda che è stata posta:
Scala non è stato implementato in C o C ++ perché Scala, il linguaggio in cui è effettivamente implementato, è un linguaggio molto migliore.
Perché è meglio? Bene, leggi gli obiettivi di Odersky per il linguaggio Scala .
Rispondere alla domanda che potrebbe essere stata intesa:
Scala genera principalmente il bytecode JVM perché offre una grande portabilità e funzionalità come un garbage collector affidabile ed efficiente, ottimizzazioni di runtime e compilazione just-in-time da parte della JVM .
Consentitemi di ripetere l'ultima cosa: JVM si compila nei punti attivi del codice macchina nel codice in esecuzione. È compilato proprio come fanno i compilatori C e C ++.
Ci sono altre macchine virtuali disponibili, ma Odersky, il creatore di Scala, conosceva già JVM. Intendeva avere il CLR come alternativa, ma lo sforzo per farlo non ha ancora raggiunto il successo.
Rispondere alla domanda che avrebbe potuto / dovuto essere posto:
La compilazione in codice macchina non offre abbastanza vantaggi rispetto alla compilazione con bytecode JVM.
È certamente possibile generare microbenchmark in C o C ++ che superano gli equivalenti JVM. È anche vero che il codice estremamente ottimizzato in C o C ++ batterà il codice estremamente ottimizzato in Java o Scala. La differenza non è poi così eccezionale per un programma di lunga durata.
Nota che Scala non è un linguaggio di scripting particolarmente buono proprio perché l'overhead per i programmi a esecuzione breve è troppo grande.
Tuttavia, nella maggior parte dei casi la velocità di sviluppo e la facilità di manutenzione sono più importanti della velocità di esecuzione . In quei casi, in cui le persone sono più preoccupate di scrivere codice di livello molto alto che sia facilmente comprensibile e modificabile, le ottimizzazioni di runtime fornite dalla JVM possono facilmente battere le ottimizzazioni di compilazione effettuate dai compilatori C o C ++, rendendo JVM (e CLR ) l'obiettivo che verrà effettivamente eseguito più velocemente.
Quindi, indipendentemente dal fatto che la domanda riguardasse il fatto che il compilatore Scala fosse o meno un codice macchina eseguibile o che i programmi Scala fossero codice macchina, i potenziali guadagni di velocità non si traducono necessariamente in guadagni di velocità reali .
E comunque,
Ti darò un contro-esempio: Haskell. Haskell genera codice macchina e, tuttavia, i programmi Haskell vanno peggio sulla sparatoria di Debian rispetto a quella di Scala. Detto questo, qualcuno può essere sicuro che i programmi Scala sarebbero più veloci se compilati direttamente sul codice macchina?