scala 编译器阶段的顺序是什么? [英] What is the order of the scala compiler phases?

查看:14
本文介绍了scala 编译器阶段的顺序是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想更清晰地了解 scala 编译的各个阶段.我知道某些事情必须在编译器中发生,但并不真正知道它们发生的顺序以及顺序应该如何影响我的编程.

I want to sharpen my picture of the phases of scala compilation. I know that certain things have to happen in the compiler, but don't really know the order in which they happen and how the order should affect my programming.

我是否正确地说以下内容是编译器功能的完整列表?

Am I right in saying that the following things are the full list of what the compiler does?

  • 解析程序
  • 检查类型
  • 删除
  • 隐式转换
  • 生成的字节码
  • 优化

如果是这样,它执行这些阶段的顺序是什么?这个顺序对程序员,尤其是类型级程序员有什么影响?

If so, what is the order that it does these phases? How does this order affect the programmer, especially the type-level programmer?

推荐答案

您可以使用 scalac -Xshow-phases 查看阶段、它们的顺序和解释.

You see the phases, their order and explanation by using scalac -Xshow-phases.

在 2.11 中,使用 -Xshow-phases -Ydebug 来显示启用和禁用的阶段.

In 2.11, use -Xshow-phases -Ydebug to show both enabled and disabled phases.

这是 2.10.0 的情况:

Here is how it's for 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

这篇关于scala 编译器阶段的顺序是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆