ScalaのfjbgでHello,World

ScalaがBytecodeを作成するために使用しているfjbg(Fast Java Bytecode Generator)を使ってHello.classを作成してみた。

もちろん実行できる

$ ./fjbg.scala
$ java Hello
Hello,World


やってることはFJBGContextのJClassでHelloクラス作成。作成したクラスにaddNewMethodでメソッド(コンストラクタ)とmainメソッドを追加。最後にHello.classに書き出して完成。

とmainの中身は各emitXXXメソッドで追加している。

オペコードを直接扱っている感じがするのにもかかわらず、コンスタントプールについてはほとんど気にしなくていいのが良い。


ちなみにできたHello.classをJava Decompilerデコンパイルするとこうなる。

import java.io.PrintStream;

public class Hello
{
  public static void main()
  {
    System.out.println("Hello,World");
  }
}