La pregunta es confusa, ya que C y C ++ son lenguajes , mientras que JVM es una máquina virtual y .Net es una plataforma . Scala podría implementarse en C o C ++, y podría generar código de máquina en lugar de código de bytes para una máquina virtual.
Respondiendo a la pregunta que se hizo:
Scala no se implementó en C o C ++ porque Scala, el lenguaje en el que se implementa realmente, es un lenguaje mucho mejor.
¿Por qué es mejor? Bueno, ve a leer sobre los objetivos de Odersky para el lenguaje Scala .
Respondiendo a la pregunta que pudo haber sido destinada:
Scala genera principalmente el código de bytes JVM porque proporciona una gran portabilidad, así como características como un recolector de basura confiable y eficiente, optimizaciones de tiempo de ejecución y compilación justo a tiempo por parte de JVM .
Permítanme repetir lo último: JVM compilará los puntos calientes del código de máquina en el código que está ejecutando. Eso es compilar al igual que los compiladores C y C ++.
Hay otras máquinas virtuales disponibles, pero Odersky, el creador de Scala, ya estaba muy familiarizado con JVM. Tenía la intención de tener CLR como alternativa, pero el esfuerzo para lograrlo aún no ha tenido éxito.
Respondiendo a la pregunta que podría / debería haberse hecho:
Compilar en código máquina no proporciona suficientes beneficios sobre compilar en código de bytes JVM.
Ciertamente es posible generar microbenchmarks en C o C ++ que superan a los equivalentes de JVM. También es cierto que el código extremadamente optimizado en C o C ++ superará el código extremadamente optimizado en Java o Scala. Sin embargo, la diferencia no es tan grande para un programa de larga duración.
Tenga en cuenta que Scala no es un lenguaje de scripting particularmente bueno precisamente porque la sobrecarga para los programas de ejecución corta es demasiado grande.
Sin embargo, en la mayoría de los casos, la velocidad de desarrollo y la facilidad de mantenimiento son más importantes que la velocidad de ejecución . En esos casos, donde las personas están más preocupadas por escribir código de muy alto nivel que es fácil de entender y cambiar, las optimizaciones de tiempo de ejecución proporcionadas por JVM pueden superar fácilmente las optimizaciones de tiempo de compilación hechas por compiladores C o C ++, haciendo JVM (y CLR ) el objetivo que realmente se ejecutará más rápido.
Entonces, no importa si la pregunta era sobre el compilador Scala como un ejecutable de código de máquina, o si los programas Scala son código de máquina, las ganancias potenciales de velocidad no necesariamente se traducen en ganancias reales de velocidad.
Y por cierto,
Te daré un contraejemplo: Haskell. Haskell genera código de máquina y, sin embargo, a los programas de Haskell les va peor en el tiroteo de Debian que en el de Scala. Dado eso, ¿alguien puede estar seguro de que los programas Scala serían más rápidos si se compilaran directamente en el código de la máquina?