scalac中使用的中间语言?

时间:2013-12-31 22:44:33

标签: scala intermediate-language scala-compiler

GCC compiler we see多个“intermediate languages”中:RTLGENERIC and GIMPLE

This answer hints关于scalac中的中间表示的想法。

我的问题是:在Scala中是否存在编译器的“中间表示”?有没有这方面的文件?

假设:

  • 我不是指JVM字节码。我的意思是抽象级别高于此。

3 个答案:

答案 0 :(得分:3)

最接近的等价物是scalac使用的icode和bcode,查看Miguel Garcia在Scalac优化器上的网站了解更多信息,请点击此处:http://magarciaepfl.github.io/scala/

考虑到字节码是scalac的最终输出,您可能还会认为Java字节码本身是您的中间表示。

或许 true 中间体是JIT在最终输出本机指令之前产生的东西?

最终......虽然没有一个地方可以指出“那里有中间人!”。 Scalac分阶段工作,连续改变抽象语法树,每个阶段产生一个新的中间。整个过程就像一个洋葱,很难尝试挑出一层,因为它比其他任何层都更重要。

答案 1 :(得分:1)

也许这会帮助你:

  

http://lampwww.epfl.ch/~paltherr/phd/altherr-phd.pdf

或此页:

  

www.scala-lang.org/node/6372

答案 2 :(得分:0)

根据Iulian Dragos的论文,后端使用称为icode的中间表示。您可以在此处阅读更多相关信息http://infoscience.epfl.ch/record/150270/files/EPFL_TH4820.pdf,第34页。