5

关于 Scala 编译器如何将各种 Scala 功能映射到字节码有什么好的文章吗?

一个快速的谷歌找到了大卫波拉克 2009 年演讲的支持材料

https://github.com/dpp/jvm_summit_2009/blob/master/scala_fancy_pants.pdf

但我怀疑这可能既过时又不完整。

我可以尝试通过scalap javap 自己收集这些数据,但如果能从别人的努力和洞察力中受益,那就太好了。

4

2 回答 2

6

在 Scala REPL 上,用于:javap -c查看生成的字节码。

例如:

scala> class Bytes { def a = println("hello") }
defined class Bytes

scala> :javap -c Bytes
Compiled from "<console>"
public class Bytes extends java.lang.Object{
public void a();
  Code:
   0:   getstatic   #13; //Field scala/Predef$.MODULE$:Lscala/Predef$;
   3:   ldc #15; //String hello
   5:   invokevirtual   #19; //Method scala/Predef$.println:(Ljava/lang/Object;)V
   8:   return

public Bytes();
  Code:
   0:   aload_0
   1:   invokespecial   #24; //Method java/lang/Object."<init>":()V
   4:   return

}
于 2013-04-08T22:56:02.030 回答
1

没有我知道的。考虑使用字节码检查工具来检查编译器生成的代码。在编写性能关键代码以验证是否正确应用了专门化、消除了闭包、通过字节码指令直接访问数组、正确扩展了宏等时,它通常很有用。

如果您使用的是 Sublime,则有一个用于查看字节码的插件

于 2013-04-08T20:31:20.940 回答