tipos semantico que proceso partes lexico funciona fases cual compiladores compilador como analizador analisis scala compiler-construction scalac

scala - semantico - que es un compilador



¿Cuál es el orden de las fases del compilador de Scala? (4)

Quiero aclarar mi imagen de las fases de la compilación de Scala. Sé que ciertas cosas deben suceder en el compilador, pero realmente no sé el orden en que suceden y cómo debería afectar mi orden a mi programación.

¿Estoy en lo cierto al decir que las siguientes cosas son la lista completa de lo que hace el compilador?

  • programa de análisis
  • tipos verificados
  • hacer borrado
  • conversión implícita
  • codigo byte generado
  • optimizar

Si es así, ¿cuál es el orden en que lo hace estas fases? ¿Cómo afecta este orden al programador, especialmente al programador de nivel de tipo?



Realmente no debería preocuparse por el orden de las fases del compilador a menos que esté escribiendo un complemento del compilador. Incluso para la programación a nivel de tipo, debería centrarse en la semántica del lenguaje.

En lo que respecta a la eliminación, por ejemplo, es importante entender los tipos estáticos frente a los dinámicos y el modelo de compilación por separado. De manera similar, es importante entender las condiciones bajo las cuales el compilador aplicará una conversión implícita. Donde esto ocurre en el ciclo de compilación es solo un detalle de la implementación.


Scala.js 0.6.23

phase name id description ---------- -- ----------- parser 1 parse source into ASTs, perform simple desugaring jspretyper 2 capture pre-typer only tree info (for Scala.js) namer 3 resolve names, attach symbols to named trees packageobjects 4 load package objects typer 5 the meat and potatoes: type the trees jsinterop 6 prepare ASTs for JavaScript interop patmat 7 translate match expressions superaccessors 8 add super accessors in traits and nested classes extmethods 9 add extension methods for inline classes pickler 10 serialize symbol tables xsbt-api 11 xsbt-dependency 12 refchecks 13 reference/override checking, translate nested objects uncurry 14 uncurry, translate function values to anonymous classes tailcalls 15 replace tail calls by jumps specialize 16 @specialized-driven class and method specialization explicitouter 17 this refs to outer pointers erasure 18 erase types, add interfaces for traits posterasure 19 clean up erased inline classes lazyvals 20 allocate bitmaps, translate lazy vals into lazified defs lambdalift 21 move nested functions to top level constructors 22 move field definitions into constructors flatten 23 eliminate inner classes mixin 24 mixin composition jscode 25 generate JavaScript code from ASTs cleanup 26 platform-specific cleanups, generate reflective calls delambdafy 27 remove lambdas icode 28 generate portable intermediate code inliner xx optimization: do inlining inlinehandlers xx optimization: inline exception handlers closelim xx optimization: eliminate uncalled closures constopt xx optimization: optimize null and other constants dce xx optimization: eliminate dead code jvm 29 generate JVM bytecode xsbt-analyzer 30 terminal 31 the last phase during a compilation run

Scala-Native 0.3.7

phase name id description ---------- -- ----------- parser 1 parse source into ASTs, perform simple desugaring namer 2 resolve names, attach symbols to named trees packageobjects 3 load package objects typer 4 the meat and potatoes: type the trees nativeinterop 5 prepare ASTs for Native interop patmat 6 translate match expressions superaccessors 7 add super accessors in traits and nested classes extmethods 8 add extension methods for inline classes pickler 9 serialize symbol tables xsbt-api 10 xsbt-dependency 11 refchecks 12 reference/override checking, translate nested objects uncurry 13 uncurry, translate function values to anonymous classes tailcalls 14 replace tail calls by jumps specialize 15 @specialized-driven class and method specialization explicitouter 16 this refs to outer pointers erasure 17 erase types, add interfaces for traits posterasure 18 clean up erased inline classes lazyvals 19 allocate bitmaps, translate lazy vals into lazified defs lambdalift 20 move nested functions to top level constructors 21 move field definitions into constructors flatten 22 eliminate inner classes mixin 23 mixin composition nir 24 cleanup 25 platform-specific cleanups, generate reflective calls delambdafy 26 remove lambdas icode 27 generate portable intermediate code inliner xx optimization: do inlining inlinehandlers xx optimization: inline exception handlers closelim xx optimization: eliminate uncalled closures constopt xx optimization: optimize null and other constants dce xx optimization: eliminate dead code jvm 28 generate JVM bytecode xsbt-analyzer 29 terminal 30 the last phase during a compilation run


Puede ver las fases, su orden y explicación utilizando scalac -Xshow-phases .

En 2.11, use -Xshow-phases -Ydebug para mostrar las fases habilitadas y deshabilitadas.

Aquí es cómo es para 2.10.0:

» scalac -Xshow-phases phase name id description ---------- -- ----------- parser 1 parse source into ASTs, perform simple desugaring namer 2 resolve names, attach symbols to named trees packageobjects 3 load package objects typer 4 the meat and potatoes: type the trees patmat 5 translate match expressions superaccessors 6 add super accessors in traits and nested classes extmethods 7 add extension methods for inline classes pickler 8 serialize symbol tables refchecks 9 reference/override checking, translate nested objects selectiveanf 10 selectivecps 11 uncurry 12 uncurry, translate function values to anonymous classes tailcalls 13 replace tail calls by jumps specialize 14 @specialized-driven class and method specialization explicitouter 15 this refs to outer pointers, translate patterns erasure 16 erase types, add interfaces for traits posterasure 17 clean up erased inline classes lazyvals 18 allocate bitmaps, translate lazy vals into lazified defs lambdalift 19 move nested functions to top level constructors 20 move field definitions into constructors flatten 21 eliminate inner classes mixin 22 mixin composition cleanup 23 platform-specific cleanups, generate reflective calls icode 24 generate portable intermediate code inliner 25 optimization: do inlining inlineExceptionHandlers 26 optimization: inline exception handlers closelim 27 optimization: eliminate uncalled closures dce 28 optimization: eliminate dead code jvm 29 generate JVM bytecode terminal 30 The last phase in the compiler chain