Вопрос сбивает с толку, поскольку C и C ++ являются языками , а JVM - это виртуальная машина, а .Net - платформа . Scala может быть реализован на C или C ++ и может генерировать машинный код вместо байт-кода для виртуальной машины.
Отвечая на вопрос, который был задан:
Scala не был реализован в C или C ++, потому что Scala, язык, на котором он фактически реализован, гораздо лучше.
Почему лучше? Ну, иди почитай о целях Одерского для языка Скала .
Отвечая на вопрос, который мог быть задуман:
Scala генерирует в основном байт-код JVM, поскольку он обеспечивает отличную переносимость, а также такие функции, как надежный и эффективный сборщик мусора, оптимизация во время выполнения и своевременная компиляция JVM .
Позвольте мне повторить последнее: JVM будет компилироваться в «горячие точки» машинного кода в коде, который он запускает. Это компилируется так же, как компиляторы C и C ++.
Доступны и другие виртуальные машины, но Одерски, создатель Scala, уже был хорошо знаком с JVM. Он намеревался использовать CLR в качестве альтернативы, но усилия, чтобы добиться этого, еще не достигли успеха.
Отвечая на вопрос, который можно / нужно было задать:
Компиляция в машинный код не дает достаточных преимуществ по сравнению с компиляцией в байт-код JVM.
Конечно, можно создавать микробенчмарки в C или C ++, которые превосходят JVM-эквиваленты. Также верно, что чрезвычайно оптимизированный код на C или C ++ будет превосходить чрезвычайно оптимизированный код на Java или Scala. Однако разница не так уж велика для длительной программы.
Обратите внимание, что Scala не является особенно хорошим языком сценариев именно потому, что накладные расходы для краткосрочных программ слишком велики.
Однако в большинстве случаев скорость разработки и простота обслуживания важнее, чем скорость выполнения . В тех случаях, когда люди больше озабочены написанием кода очень высокого уровня, который легко понять и изменить, оптимизация времени выполнения, предоставляемая JVM, может легко превзойти оптимизацию времени компиляции, сделанную компиляторами C или C ++, делая JVM (и CLR) ) цель, которая на самом деле будет выполняться быстрее.
Таким образом, независимо от того, был ли вопрос о том, является ли компилятор Scala исполняемым машинным кодом или программы Scala являются машинным кодом, потенциальное увеличение скорости не обязательно приводит к реальному увеличению скорости.
И кстати,
Я приведу контрпример: Хаскелл. Haskell генерирует машинный код, и, тем не менее, программы на Haskell хуже в перестрелке Debian, чем Scala. Учитывая это, кто-нибудь может быть уверен, что программы Scala будут быстрее, если скомпилированы непосредственно в машинный код?