在GCC编译器中,我们看到几种"中间语言":RTL,GENERIC 和GIMPLE。
这个答案暗示了scalac
中中间表示的想法。
我的问题是:在 Scala 中是否有编译器的"中间表示"?是否有任何文档?
假设:
- 我不是指 JVM 字节码。我的意思是高于此的抽象级别。
最接近的等价物是 scalac 使用的 icode 和 bcode,查看 Miguel Garcia 在 Scalac 优化器上的网站以获取更多信息,请在此处:http://magarciaepfl.github.io/scala/
你也可以认为Java字节码本身是你的中间表示,因为字节码是scalac的最终输出。
或者,也许真正的中间体是 JIT 在最终输出本机指令之前产生的东西?
不过最终...没有一个地方可以指向"有中间人! Scalac分阶段工作,连续改变抽象语法树,每个阶段都会产生一个新的中间体。 整个事情就像洋葱一样,很难尝试挑选出某一层比其他任何一层都更重要。
也许这会帮助你:
http://lampwww.epfl.ch/~paltherr/phd/altherr-phd.pdf
或此页面:
www.scala-lang.org/node/6372
根据 Iulian Dragos 的论文,后端使用称为 icode 的中间表示。 您可以在第 34 页 http://infoscience.epfl.ch/record/150270/files/EPFL_TH4820.pdf 阅读更多相关信息。