Mi chiedo come scala sta generando il codice byte, usa alcune librerie come ASM? O semplicemente scrivere file binari in .class per le prestazioni?In che modo scala sta generando il codice byte? Usando alcune librerie come ASM, o scrivi direttamente binari?
risposta
Partendo 2.10 il compilatore Scala usa ASM 4 emettere bytecode, sostenendo -target: jvm-1.5, -target: jvm-1.6, e -target: aspetti applicativi jvm-1,7
del back-end sono descritte in:
- Emitting Scala classfiles tramite ASM http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/2012Q2/GenASM.pdf
L'emettitore bytecode (GenASM, origine collegata sotto) visita un flusso di controllo grafico (CFG) costruito da una fase precedente, e utilizza l'API Streaming ASM emettere direttamente classfiles:
https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala
Ecco come funzionano le cose ora. Nel regno delle possibilità sperimentali, ho lavorato su un bytecode sperimentale emesso che è più veloce, in parte perché ignora la costruzione del CFG e visita direttamente Scala Syntax Trees (usando quindi l'API ASM di Tree per compilare i file di classe in memoria). Dettagli in:
sembra che stanno generando un codice intermedio, e poi convertirlo manualmente in bytecode Java o .NET MSIL
bella panoramica del compilatore qui: https://wiki.scala-lang.org/display/SIW/Overview+of+Compiler+Phases
- 1. IntelliJ sta generando getter privati
- 2. Python che scrive file binari, byte
- 3. GetAuthorizationGroups() sta generando un'eccezione
- 4. Scrivi byte in un file in modo nativo in PowerShell
- 5. autoconf non sta generando makefile?
- 6. Generando direttamente sottoinsiemi specifici di un powerset?
- 7. Scrivi cv :: Mat su file binari?
- 8. In che modo ASM sa che un'operazione aritmetica è firmata o non firmata?
- 9. L'assemblaggio dei falsi non sta generando
- 10. Utilizzo di pacchetti binari direttamente
- 11. Come scrivi cast Char/Int in Scala?
- 12. Scrivi dati binari con Haskell da leggere con C?
- 13. Python Scrivi byte al file
- 14. Strumentazione del codice a byte - implementa l'agente nativo o java?
- 15. Esiste una versione di Scala di .irbrc o un altro modo per definire alcune librerie predefinite per uso REPL?
- 16. Scrivi codice cacao sicuro
- 17. La definizione jquery.d.ts sta generando molti errori in TypeScript 0.9
- 18. Scrivi file binario in Ruby
- 19. In che modo Scala Slick traduce il codice Scala in JDBC?
- 20. Il codice del metodo di azione C# sta effettivamente generando un reindirizzamento 301?
- 21. nel kernel linux, asm o asm-generic?
- 22. Spiegazione del codice Asm
- 23. perché alcune librerie javascript usano $ per uno o l'altro uso
- 24. In che modo il sistema operativo esegue file binari compilati?
- 25. Buon riferimento per il modo in cui scala è mappata al codice byte jvm
- 26. Newbie asm: dov'è il codice di chiamata?
- 27. Come posso verificare un processo in esecuzione per vedere quali librerie condivise sta usando?
- 28. Visual Studio C++: vedere il codice ASM?
- 29. Analogico ASM o CGLIB per Dalvik
- 30. Java produce codice oggetto o codice byte?
Cosa prima scala 2.10? – Freewind
Prima di 2.10 "GenJVM" era in uso. E 'stato EOL'd ormai. GenJVM ha utilizzato una libreria di manipolazione bytecode sviluppata in-house (che non teneva il passo con i frame di stack dello stack JDK6, ad esempio) –
Ho recitato questa domanda, ma solo a causa della tua risposta. Grandi informazioni! – Andy