2012-11-14 4 views

Antwort

28

mit 2.10 Starten des Scala-Compiler verwendet ASM 4 auszusenden Bytecode, Stütz -target: JVM-1,5, -target: JVM-1,6 und -target:

Der Bytecode-Emitter (GenASM, Quelle unter verknüpft) Besuche ein Steuerflussdiagramm (CFG) durch eine vorhergehende Phase aufgebaut und verwendet die Streaming ASM API direkt Klassendateien zu emittieren:

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

Das ist, wie die Dinge jetzt arbeiten. Im Bereich der experimentellen Möglichkeiten habe ich an einem experimentellen Bytecode gearbeitet, der schneller ist, teilweise weil er das Erstellen der CFG überspringt und Scala Abstract Syntax Trees direkt aufruft (mit Hilfe der Tree ASM API, um Classfiles im Speicher zu erstellen). Details in:

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

+0

Was vor scala 2.10? – Freewind

+1

Vor 2.10 wurde "GenJVM" verwendet. Es wurde jetzt EOL'd. GenJVM verwendete eine selbstentwickelte Bytecode-Manipulations-Bibliothek (die zum Beispiel nicht mit JDK6-Stapelkartenrahmen Schritt hielt) –

+0

Ich habe diese Frage nur wegen Ihrer Antwort markiert. Tolle Infos! – Andy

Verwandte Themen