A questão é confusa, pois C e C ++ são linguagens , enquanto a JVM é uma máquina virtual e o .Net é uma plataforma . O Scala pode ser implementado em C ou C ++ e gerar código de máquina em vez de código de código para uma máquina virtual.
Respondendo à pergunta que foi feita:
O Scala não foi implementado em C ou C ++ porque o Scala, a linguagem na qual é realmente implementada, é uma linguagem muito melhor.
Porque é melhor? Bem, leia os objetivos de Odersky para o idioma Scala .
Respondendo à pergunta que pode ter sido pretendida:
O Scala gera principalmente o bytecode da JVM, pois fornece grande portabilidade, além de recursos como um coletor de lixo confiável e eficiente, otimizações em tempo de execução e compilação just-in-time pela JVM .
Deixe-me repetir a última coisa: a JVM irá compilará os pontos de acesso do código de máquina no código em execução. Isso é compilar exatamente como os compiladores C e C ++.
Existem outras máquinas virtuais disponíveis, mas Odersky, criador da Scala, já estava muito familiarizado com a JVM. Ele pretendia ter o CLR como uma alternativa, mas o esforço para fazer isso ainda não obteve sucesso.
Respondendo à pergunta que poderia / deveria ter sido feita:
A compilação no código da máquina não fornece benefícios suficientes sobre a compilação no bytecode da JVM.
Certamente, é possível gerar marcas de microbench em C ou C ++ que superem os equivalentes da JVM. Também é verdade que o código extremamente otimizado em C ou C ++ superará o código extremamente otimizado em Java ou Scala. A diferença não é tão grande, no entanto, para programas de longa duração.
Observe que Scala não é uma linguagem de script particularmente boa precisamente porque a sobrecarga para programas de execução curta é muito grande.
No entanto, na maioria dos casos, a velocidade de desenvolvimento e a facilidade de manutenção são mais importantes que a velocidade de execução . Nesses casos, onde as pessoas estão mais preocupadas em escrever códigos de nível muito alto que sejam facilmente compreendidos e alterados, as otimizações em tempo de execução fornecidas pela JVM podem superar facilmente as otimizações em tempo de compilação feitas pelos compiladores C ou C ++, tornando a JVM (e CLR ) o destino que realmente será executado mais rapidamente.
Portanto, não importa se a pergunta era sobre o compilador Scala sendo um código de máquina executável ou programas Scala sendo código de máquina, os possíveis ganhos de velocidade não necessariamente se traduzem em ganhos reais de velocidade.
E, aliás,
Vou lhe dar um contra-exemplo: Haskell. Haskell gera código de máquina e, ainda assim, os programas Haskell se saem pior no tiroteio do Debian do que no Scala. Dado isso, alguém pode ter certeza de que os programas Scala seriam mais rápidos se compilados diretamente no código da máquina?