【问题标题】:Specification of Scala compiler's intermediate codeScala编译器中间代码规范
【发布时间】:2015-07-28 15:51:31
【问题描述】:

Scala 编译器生成的中间代码是否有任何正式规范或详细描述(即将-Xprint-icode 选项传递给scalac)?

谢谢。

【问题讨论】:

  • 愿意解释反对意见吗?
  • 我只投了赞成票)。还没有找到任何此类文档,但是您可能会从 compiler's stages 和相应的 scaladocs 中猜到一些信息 - 至少您会知道包含什么,不包含什么
  • Miguel Garcia 实现了新的后端,并在去年写了一篇关于它的文章,地址为magarciaepfl.github.io/scala/#GettingStarted

标签: scala scalac intermediate-code


【解决方案1】:

icode 格式正在消失,引入了新的GenBCode 后端,该后端直接从 scalac Trees 转换为 ASM 的字节码表示。如果我是你,我不会花时间学习它。

相反,我建议您在 cleanup 之后打印,而不是 (-Xprint:cleanup),这是后端之前的最后一个阶段,使用 scalac 树,它们非常容易理解,因为它们基本上是具有 Scala 语法的 Java 代码.

也就是说,如果您坚持与icode 打交道,我认为没有任何关于它的真实文档。但它几乎与 JVM 字节码是一一对应的:它有类、字段和方法。在方法内部,有一个基于堆栈的指令集。

【讨论】:

  • 听起来不错,谢谢))我对 icode 并不是特别感兴趣,但更确切地说是对后端生成的代码感兴趣,不管它是什么。这么说,新后端有什么规格吗?也许正在制作文档?
【解决方案2】:

在此处查找 icode 的文档(第 35 页): http://infoscience.epfl.ch/record/150270/files/EPFL_TH4820.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多