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 に答える