Scala oluşturma bayt kodunun nasıl olduğunu merak ediyorum, ASM gibi bazı kütüphaneleri kullanıyor mu? Ya da sadece performans için .class dosyalarını ikili yazınız? el ile java bayt veya .net MSIL dönüştürerek sonra bazı ara kod üreten ve konum gibiScala oluşturma bayt kodu nasıl? ASM gibi bazı kütüphaneleri kullanarak veya doğrudan ikili yazabilir misiniz?
cevap
ASM 4 kullanmaktadır JVM-1.5, -hedef: -hedef destekleyen bayt kodu yaymak üzere JVM-1.6 ve -hedef:
-
: arka uç JVM-1,7
- Yayan Scala, bir önceki aşamada tarafından inşa ASM http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/2012Q2/GenASM.pdf
uygulama yönleri tarif edilmektedir
baytkodu yayıcı (GenASM, aşağıda bağlantısı kaynak) Denetim Akış Grafiği (CFG) ziyaret yoluyla classfiles ve doğrudan classfiles yayacak şekilde Akış ASM API kullanır: şeyler şimdi nasıl çalıştığını bulunuyor
https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala
. Deneysel olasılıklar alanında, CFG'yi atlamayı ve Scala Özet Sözdizimi Ağaçlarını doğrudan ziyaret ettiğinden (daha sonra bellekte sınıf dosyaları oluşturmak için Ağaç ASM API'sini kullanarak) daha hızlı yayılan deneysel bir bayt kodu üzerinde çalışıyorum. Ayrıntılar:
görünüyor
burada derleyici Güzel bakış: https://wiki.scala-lang.org/display/SIW/Overview+of+Compiler+Phases 2.10 Scala derleyici ile başlayarak
Ne scala 2.10 önce? – Freewind
2.10'dan önce "GenJVM" kullanımdaydı. Şimdiye kadar EOL'd olmuştur. GenJVM, kendi bünyesinde geliştirilen bir bytecode-manipulation kütüphanesi kullandı (örneğin JDK6 yığın harita çerçevelerine yetişemedi). –
Bu sorunun cevabını verdim, ama sadece cevabınız yüzünden. Harika bilgi! – Andy