Die Frage ist verwirrend, da C und C ++ Sprachen sind , während JVM eine virtuelle Maschine ist und .Net eine Plattform ist . Scala könnte in C oder C ++ implementiert sein und für eine virtuelle Maschine Maschinencode anstelle von Bytecode generieren.
Beantwortung der gestellten Frage:
Scala wurde nicht in C oder C ++ implementiert, da Scala, die Sprache, in der es tatsächlich implementiert ist, eine viel bessere Sprache ist.
Warum ist es besser? Nun, lesen Sie etwas über Oderskys Ziele für die Scala-Sprache .
Beantwortung der möglicherweise beabsichtigten Frage:
Scala generiert hauptsächlich JVM-Bytecode, da dies eine hervorragende Portabilität sowie Funktionen wie einen zuverlässigen und effizienten Garbage Collector, Laufzeitoptimierungen und eine Just-in-Time-Kompilierung bietet durch die JVM .
Lassen Sie mich das letzte wiederholen: JVM wird kompiliert , um Code-Hotspots in dem Code zu verarbeiten, den es ausführt. Das ist kompilieren, genau wie es C- und C ++ - Compiler tun.
Es gibt andere virtuelle Maschinen, aber Odersky, der Erfinder von Scala, war mit JVM bereits sehr vertraut. Er wollte CLR als Alternative haben, aber die Bemühungen, dies in Gang zu bringen, haben noch keinen Erfolg gebracht.
Beantwortung der Frage, die hätte gestellt werden können / sollen:
Das Kompilieren in Maschinencode bietet nicht genügend Vorteile gegenüber dem Kompilieren in JVM-Bytecode.
Es ist sicherlich möglich, Mikrobenchmarks in C oder C ++ zu generieren, die JVM-Äquivalente übertreffen. Es ist auch wahr, dass extrem optimierter Code in C oder C ++ extrem optimierten Code in Java oder Scala schlagen wird. Der Unterschied ist jedoch nicht allzu groß für ein lang laufendes Programm.
Beachten Sie, dass Scala gerade deshalb keine besonders gute Skriptsprache ist, weil der Aufwand für kurzfristige Programme zu groß ist.
In den meisten Fällen sind jedoch die Entwicklungsgeschwindigkeit und die Wartungsfreundlichkeit wichtiger als die Ausführungsgeschwindigkeit . In den Fällen, in denen die Leute mehr daran interessiert sind, einfach zu verstehenden und zu ändernden Code auf höchster Ebene zu schreiben, können die von der JVM bereitgestellten Laufzeitoptimierungen die von C- oder C ++ - Compilern vorgenommenen Kompilierzeitoptimierungen leicht übertreffen, was zu JVM (und CLR führt ) das Ziel, das tatsächlich schneller ausgeführt wird.
Unabhängig davon, ob es sich bei Scala Compiler um eine ausführbare Maschinencode-Datei oder bei Scala- Programmen um Maschinencode handelte, werden die potenziellen Geschwindigkeitsgewinne nicht unbedingt in echte Geschwindigkeitsgewinne umgesetzt.
Und nebenbei,
Ich gebe Ihnen ein Gegenbeispiel: Haskell. Haskell generiert Maschinencode, und dennoch schneiden Haskell-Programme bei Debians Schießerei schlechter ab als bei Scala. Kann jemand sicher sein, dass Scala-Programme schneller wären, wenn sie direkt in Maschinencode kompiliert würden?