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