C ve C ++ dilleri olduğu için soru kafa karıştırıcı, JVM ise sanal bir makine ve .Net bir platform . Scala, C veya C ++ ile uygulanabilir ve sanal bir makine için bayt kodu yerine makine kodu oluşturabilir.
Sorulan soruyu cevaplama:
Scala C veya C ++ dilinde uygulanmadı çünkü aslında uygulandığı dil Scala çok daha iyi bir dil.
Neden daha iyi Öyleyse git Odersky'nin Scala dili için hedeflerini oku .
Amaçlanan soruyu cevaplamak:
Scala, öncelikle JVM bayt kodunu oluşturur, çünkü güvenilir ve verimli bir çöp toplayıcı, çalışma zamanı optimizasyonları ve JVM tarafından tam zamanında derleme gibi özelliklerin yanı sıra mükemmel taşınabilirlik sağlar .
Son şeyi tekrar edeyim: JVM , çalıştığı koddaki makine kodunu sıcak noktalar için derleyecektir . C ve C ++ derleyicileri gibi derler.
Kullanılabilir başka sanal makineler var, ancak Scala'nın yaratıcısı Odersky, JVM'ye zaten çok aşinaydı. Bir alternatif olarak CLR'ye sahip olmayı hedefliyordu, ancak bunu başarma çabası henüz başarıya ulaşamadı.
Sorulması gereken / cevaplanması gereken soruyu cevaplama:
Makine kodunu derlemek, JVM bayt kodunu derlemekten yeterince fayda sağlamaz.
C veya C ++ 'da JVM eşdeğerlerini geçen mikroböceklerin üretilmesi kesinlikle mümkündür. Ayrıca, C veya C ++ 'da aşırı derecede optimize edilmiş kodun Java veya Scala'da oldukça optimize edilmiş kodu geçeceği de doğrudur. Ancak, uzun süren program için fark o kadar da büyük değil.
Scala'nın tam olarak iyi bir betik dili olmadığını unutmayın; çünkü kısa süreli programlar için ek yük çok fazladır.
Ancak, çoğu durumda geliştirme hızı ve bakım kolaylığı, yürütme hızından daha önemlidir . İnsanların kolayca anlayabilen ve değiştiren çok yüksek seviyeli kod yazma konusunda daha fazla endişe duydukları durumlarda, JVM tarafından sağlanan çalışma zamanı optimizasyonları, C veya C ++ derleyicileri tarafından yapılan derleme zamanı optimizasyonlarını kolayca yenebilir ve JVM (ve CLR) yapabilir. ) aslında daha hızlı yürütülecek hedef.
Dolayısıyla, sorunun Scala derleyicisinin çalıştırılabilir bir makine kodu olması veya Scala programlarının makine kodu olması ile ilgili olması fark etmeksizin , potansiyel hız kazanımları, mutlaka gerçek hız kazanımlarına çevrilmez .
Ve bu arada,
Size bir karşı örnek vereceğim: Haskell. Haskell, makine kodu üretir ve yine de Haskell programları, Debian'ın çatışmalarında Scala'nınkinden daha kötü. Buna bakıldığında, herkes doğrudan makine koduna derlenirse Scala programlarının daha hızlı olacağından emin olabilir mi?