Ich frage mich, wie scala ist die Erzeugung von Byte-Code, verwendet es einige Bibliotheken wie ASM? Oder schreiben Sie einfach Binärdateien in .class-Dateien, um Leistung zu erzielen?Wie generiert Scala Byte-Code? Verwenden Sie einige Bibliotheken wie ASM, oder schreiben Sie Binär direkt?
Antwort
mit 2.10 Starten des Scala-Compiler verwendet ASM 4 auszusenden Bytecode, Stütz -target: JVM-1,5, -target: JVM-1,6 und -target:
-
: JVM-1,7
- Emitting Scala Klassendateien über ASM http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/2012Q2/GenASM.pdf
Implementierungsaspekte des Backend sind beschrieben
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:
sieht aus wie sie einige Zwischencode sind zu erzeugen, und es dann hier manuell in Java-Bytecode oder .net msil
Nizza Überblick über Compiler Umwandlung: https://wiki.scala-lang.org/display/SIW/Overview+of+Compiler+Phases
- 1. Insert-Bytecode von ASM
- 2. So ändern Sie einen Java-Bytecode mit ASM 4.0
- 3. Verwenden Sie Scala typeclasses direkt ohne implizites Beweisobjekt
- 4. Wie erhalten Sie Referenzen in ASM?
- 5. ASM Bytecode Instrumentierung für Verfahren Entry/Exit
- 6. Wie verwenden Sie Datenanmerkungen direkt in Modellen
- 7. Scala wie Standardeinstellungen zu verwenden, ohne sie
- 8. Wie catch Block-Code mit ASM Bytecode Framework
- 9. Verwenden Sie Boost C++ - Bibliotheken?
- 10. Warum müssen Setuptools Bytecode schreiben?
- 11. Scala Bibliotheken und Frameworks
- 12. können Sie Bibliotheken in PL/Perl verwenden
- 13. Schreiben Sie einige Zufallszahlen in das Rohr?
- 14. Wie schreiben Sie Ihre Paketdokumentation?
- 15. Wie referenzieren Sie externe Bibliotheken mit Jasmine + Resharper
- 16. Wie verwenden Sie generische Bibliotheken aus einem Web-Framework?
- 17. binär schreiben SystemVerilog
- 18. Python schreiben binär
- 19. Wie schreiben Sie gute, sehr nützliche Allzweckbibliotheken?
- 20. Wie können Sie Bibliotheken von Drittanbietern in Glassfish verwenden?
- 21. Hinzufügen von Try/Catch-Block in Bytecode durch ASM
- 22. Verwenden Sie Curl-Bibliotheken, ohne sie zu installieren
- 23. Kann ich sowohl Java-Bytecode als auch Quellcode mit dem gleichen "Generator" mit ASM erzeugen?
- 24. ASM Bytecode Werte erhalten als Argumente bei Aufrufen einiger Methoden
- 25. MooTools: So verwenden Sie responseText direkt
- 26. Empfehlen Sie einige C# -Druck/Druckvorschau/Reporting-Bibliotheken?
- 27. So schreiben Sie Binär (nicht UTF-8) in Datei
- 28. in Linux Kernel, Asm oder Asm-Generic?
- 29. Wie Sie allgemeine C++ - Namenskonventionen mit denen der Bibliotheken abgleichen
- 30. Verwenden Sie Javascript-Bibliotheken von Npm installiert
Was vor scala 2.10? – Freewind
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) –
Ich habe diese Frage nur wegen Ihrer Antwort markiert. Tolle Infos! – Andy