关于 Scala 编译器如何将各种 Scala 功能映射到字节码有什么好的文章吗?
一个快速的谷歌找到了大卫波拉克 2009 年演讲的支持材料
https://github.com/dpp/jvm_summit_2009/blob/master/scala_fancy_pants.pdf
但我怀疑这可能既过时又不完整。
我可以尝试通过scalap javap 自己收集这些数据,但如果能从别人的努力和洞察力中受益,那就太好了。
关于 Scala 编译器如何将各种 Scala 功能映射到字节码有什么好的文章吗?
一个快速的谷歌找到了大卫波拉克 2009 年演讲的支持材料
https://github.com/dpp/jvm_summit_2009/blob/master/scala_fancy_pants.pdf
但我怀疑这可能既过时又不完整。
我可以尝试通过scalap javap 自己收集这些数据,但如果能从别人的努力和洞察力中受益,那就太好了。
在 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
}
没有我知道的。考虑使用字节码检查工具来检查编译器生成的代码。在编写性能关键代码以验证是否正确应用了专门化、消除了闭包、通过字节码指令直接访问数组、正确扩展了宏等时,它通常很有用。
如果您使用的是 Sublime,则有一个用于查看字节码的插件。