Concurrent Clean : CleanJ : ABCコード : Jasmin

ABCコードは型がないので、これをJavaコードに起こすには型を推論しなければいけない。で、これが結構面倒くさい。
JavaコードではなくJasminを使えば、型の推論を回避できるだろうかと考えている。*1
ただ、Jasminのドキュメントはちょっと少ない。すでに絶版になった次の本で作られて使われたものらしいので、これを買えばよいのかな?

Java Virtual Machine (Java Series)

Java Virtual Machine (Java Series)

      • -

もう少し詳しく書くと、A値の方はObject型なので特別考えることはないのだけれど、B値の方は、byteかintかdoubleかbooleanかを判断する必要があって、byte=int=booleanとしてもdoubleはサイズが違うので型を判断して取扱いを変えなければいけない。
けれどもABCマシンでは、doubleはint2つ分であるかのように扱われるので、Javaに変換するには呼び出されている命令を考えて型情報を推論してやる必要がある。最悪の場合、他のモジュールの関数を呼び出す場合は、そのモジュールの公開関数の情報を読みにいかないと必要な情報が得られないような気がする。
Jasminはスタックやローカル変数に型がなさそうなので、そのあたりを考える手間が省けるのではないかと。関数呼び出しも、doubleをint2つ分で宣言しておけば、型情報を調べなくても呼び出せるのではないかと期待している。

*1:bytecodeを直接書くとデバッグしにくいのでちょっと