2012-11-14 3 views

risposta

28

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:

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:

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

+0

Cosa prima scala 2.10? – Freewind

+1

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) –

+0

Ho recitato questa domanda, ma solo a causa della tua risposta. Grandi informazioni! – Andy

Problemi correlati