Java VM 自作 方法

Posted on
R Java

Java VMを自作したのでその方法を書いておきます。

作ったもの

RでJava VMを実装しました。igjit/jvmrr

今のところ39個のJava VM命令を実装しており、Fizz Buzzが動きます。

Japan.R 2019での発表資料

https://igjit.github.io/slides/2019/12/jvmrr/#/

方法

1. 実装言語を決める

To implement the Java Virtual Machine correctly, you need only be able to read the class file format and correctly perform the operations specified therein.

https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html

クラスファイルを読めてその中の命令を実行できればJava VMを実装できるよ、とのことなので好きな言語で実装しましょう。

クラスファイルはバイナリなのでバイナリを扱う方法を確認しておきます。 Rの場合はreadBinでバイナリを読んでbitw系の関数でビット操作できます。

2. 概要を把握する

めもりーさんの資料がわかりやすいです。

3. Hello Worldを動かす

Java VM仕様を確認しつつ実装していきます。 わかんないとこあってもPHP で JVM を実装して Hello World を出力するまでを写経していけば多分なんとかなるはず。

Hello Worldまでが一番大変だと思うけど、Hello Worldが動くとまさにHello Worldって感じなのでがんばってください。

4. VM命令を増やす

VM命令を実装していくとできることが増えるので面白いです。私は

  • 四則演算
  • forループ
  • Fizz Buzz

を順に実行できるようにしていきました。

javap -c FizzBuzz.class

とかやると実行に必要なVM命令がわかります。

なぜ

Japan.Rの懇親会でなんでそんなことしたのって聞かれたんですが、理由はRでできるか試してみたかったのと、ただ単純に言語処理系を作るのは面白いからです。

Java VM作成は大変楽しい作業なのでみなさんも長期休暇に挑戦してみてください。Enjoy!