Питання заплутане, оскільки C і C ++ - це мови , тоді як JVM - це віртуальна машина, а .Net - платформа . Scala може бути реалізований в C або C ++, і він може генерувати машинний код замість байт-коду для віртуальної машини.
Відповідаючи на поставлене запитання:
Скала не була реалізована в C або C ++, оскільки Scala, мова, якою вона реально реалізована, є набагато кращою мовою.
Чому краще? Що ж, читайте про цілі Одерського для мови 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 генерує машинний код, і, тим не менше, програми Haskell стають гіршими на перестрілку Debian, ніж у Scala. Враховуючи це, чи може хто бути впевнений, що програми Scala були б швидшими, якщо їх скласти безпосередньо до машинного коду?