2012-11-14 8 views

Odpowiedz

28

Począwszy 2,10 kompilator Scala wykorzystuje ASM 4 emitować bajtowego, wspierając -target: JVM-1,5 -target: JVM-1.6 i -target aspekty implementacji JVM-1,7

z backend opisano w:

Kod bajtowy emiter (GenASM, źródło połączone poniżej) wizyty przepływ sterowania wykresu (cfg) zbudowany według poprzedniego etapu i wykorzystuje interfejs API strumieniowego ASM bezpośrednio emitują classfiles:

https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala

to jak to wszystko działa teraz. W zakresie możliwości eksperymentalnych pracowałem nad emulacją eksperymentalnego kodu bajtowego, który jest szybszy, częściowo dlatego, że pomija budowanie CFG i bezpośrednio odwiedza Scala Abstract Syntax Trees (używając wtedy API drzewa ASM do budowania klasowych plików w pamięci). Szczegóły:

https://github.com/magarciaEPFL/scala/blob/GenBCodeOpt/src/compiler/scala/tools/nsc/backend/jvm/GenBCode.scala

+0

Co przed scala 2.10? – Freewind

+1

Przed 2.10 "GenJVM" był w użyciu. Do tej pory było to EOL'd. GenJVM użył biblioteki manipulacji kodu bajtowego opracowanej wewnętrznie (która nie nadąża za ramkami mapy stosów JDK6, na przykład) –

+0

Zrobiłem to pytanie, ale tylko z powodu twojej odpowiedzi. Świetne informacje! – Andy

Powiązane problemy