La question est confuse, car C et C ++ sont des langages , tandis que JVM est une machine virtuelle et .Net est une plate - forme . Scala pourrait être implémenté en C ou C ++, et il pourrait générer du code machine au lieu du bytecode pour une machine virtuelle.
Répondre à la question posée:
Scala n'a pas été implémenté en C ou C ++ car Scala, le langage dans lequel il est réellement implémenté, est un bien meilleur langage.
Pourquoi est-ce mieux? Eh bien, allez lire sur les objectifs d'Odersky pour la langue Scala .
Répondre à la question qui aurait pu être voulue:
Scala génère principalement du bytecode JVM car il offre une grande portabilité ainsi que des fonctionnalités telles qu'un garbage collector fiable et efficace, des optimisations d'exécution et une compilation juste à temps par la JVM .
Permettez-moi de répéter cette dernière chose: JVM compilera les points chauds du code machine dans le code qu'il exécute. C'est compiler comme le font les compilateurs C et C ++.
Il existe d'autres machines virtuelles disponibles, mais Odersky, le créateur de Scala, connaissait déjà très bien la JVM. Il avait l'intention d'avoir CLR comme alternative, mais l'effort pour le faire n'a pas encore réussi.
Répondre à la question qui aurait pu / aurait dû être posée:
La compilation en code machine n'offre pas suffisamment d'avantages par rapport à la compilation en bytecode JVM.
Il est certainement possible de générer des microbenchmarks en C ou C ++ qui battent les équivalents JVM. Il est également vrai que le code extrêmement optimisé en C ou C ++ battra le code extrêmement optimisé en Java ou Scala. Cependant, la différence n'est pas si grande pour un programme de longue durée.
Notez que Scala n'est pas un langage de script particulièrement bon, précisément parce que la surcharge pour les programmes courts est trop importante.
Cependant, dans la plupart des cas, la vitesse de développement et la facilité de maintenance sont plus importantes que la vitesse d' exécution . Dans ces cas, où les gens sont plus intéressés par l'écriture de code de très haut niveau facilement compréhensible et modifiable, les optimisations d'exécution fournies par la JVM peuvent facilement battre les optimisations de compilation effectuées par les compilateurs C ou C ++, ce qui rend JVM (et CLR ) la cible qui s'exécutera plus rapidement.
Donc, peu importe que la question soit de savoir si le compilateur Scala est un exécutable de code machine, ou si les programmes Scala sont du code machine, les gains de vitesse potentiels ne se traduisent pas nécessairement en gains de vitesse réels .
Et, au fait,
Je vais vous donner un contre-exemple: Haskell. Haskell génère du code machine, et, pourtant, les programmes Haskell se comportent moins bien lors de la fusillade de Debian que de Scala. Compte tenu de cela, quelqu'un peut-il être sûr que les programmes Scala seraient plus rapides s'ils étaient compilés directement en code machine?