SCALAコンパイラフェーズの順序は何ですか?
-
13-10-2019 - |
質問
Scala Compilationの段階の写真を磨きたいと思います。コンパイラでは特定のことが起こらなければならないことを知っていますが、それらがどのような順序とプログラミングに影響を与えるべきかを本当に知りません。
私は、次のことがコンパイラーがしていることの完全なリストだと言っているのですか?
- 解析プログラム
- チェックされたタイプ
- 消去します
- 暗黙的な変換
- 生成されたバイトコード
- 最適化
もしそうなら、これらのフェーズをする順序は何ですか?この注文は、プログラマー、特にタイプレベルのプログラマーにどのように影響しますか?
解決
使用することによって、フェーズ、順序、説明が表示されます scalac -Xshow-phases
.
2.11で使用します -Xshow-phases -Ydebug
有効フェーズと無効フェーズの両方を表示します。
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
他のヒント
見たことがありますか ここ?そのページが指しています http://www.scala-lang.org/sites/default/files/sids/nielsen/thu,%202009-05-28,%2008:13/compiler-phase-sid.pdf (PDF)、SCALA 2.8のコンパイラフェーズを説明しています。
コンパイラプラグインを書いていない限り、コンパイラフェーズの順序について心配する必要はありません。タイプレベルのプログラミングであっても、代わりに言語セマンティクスに焦点を当てる必要があります。
たとえば、消去に関する限り、静的タイプと動的タイプと個別のコンピレーションのモデルを理解することが重要です。同様に、コンパイラが暗黙的な変換を適用する条件を理解することが重要です。これらがコンパイルサイクルで発生する場合、実装の詳細にすぎません。
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