scala是如何生成字节码的?使用ASM之类的库,还是直接编写二进制文件?

scala是如何生成字节码的?使用ASM之类的库,还是直接编写二进制文件?,scala,jvm,bytecode,Scala,Jvm,Bytecode,我想知道scala是如何生成字节码的,它是否使用了ASM之类的库?或者只是将二进制文件写入.class文件以提高性能?看起来它们正在生成一些中间代码,然后手动将其转换为java字节码或.net msil 这里的编译器概述不错:从2.10开始,Scala编译器使用ASM 4发出字节码,支持-target:jvm-1.5、-target:jvm-1.6和-target:jvm-1.7 后端的实现方面如中所述: 通过ASM发送Scala类文件 字节码发射器(GenASM,下面链接的源代码)访问前

我想知道scala是如何生成字节码的,它是否使用了ASM之类的库?或者只是将二进制文件写入.class文件以提高性能?

看起来它们正在生成一些中间代码,然后手动将其转换为java字节码或.net msil


这里的编译器概述不错:

从2.10开始,Scala编译器使用ASM 4发出字节码,支持-target:jvm-1.5、-target:jvm-1.6和-target:jvm-1.7

后端的实现方面如中所述:

  • 通过ASM发送Scala类文件
字节码发射器(GenASM,下面链接的源代码)访问前一阶段构建的控制流图(CFG),并使用流式ASM API直接发出类文件:

这就是现在的情况。在实验可能性领域,我一直在研究一种更快的实验性字节码,部分原因是它跳过了构建CFG,直接访问Scala抽象语法树(然后使用树ASMAPI在内存中构建类文件)。详情见:


在2.10“GenJVM”使用之前。现在它已经报废了。GenJVM使用了一个内部开发的字节码操作库(例如,它跟不上JDK6堆栈映射框架),我用星号标出了这个问题,但这只是因为您的答案。好消息@Miguel Garcia,有没有办法访问内存中发出的字节码?我想将运行时生成的Scala源代码直接编译到“.class”文件。也就是说,仅当它比编写scala文本文件并通过系统调用调用编译器更快时。我将查看第二个链接是404。知道它可能搬到哪里去了吗?