Java言語以外にも使えるJavaVM

以前、classファイルをいじって遊んでみたのですが、そのとき感じたのが、JavaVMって、Java言語のために作ったものだけれど、Java言語以外でも使えるんじゃないか、ということです。
メソッド名の名前で使える文字は、Java言語側の制約であって、JavaVMでは、そんな制約はありません。
"(^^;"というメソッド名も可能でした。


ifやwhileなどの予約語Java言語側の話であって、JavaVMにはそんな文法はありません。
バイトコードのジャンプ命令などに置き換わります。


ローカル変数は、JavaVMになると、領域だけあって名前はありません。
0番目、1番目という番号で指定されます。
なので、逆コンパイルしてもローカル変数名は復元されません。


メソッド名は先日のとおり。
クラス名についても基本はメソッド名と同様なのですが、クラスローダに依存しますし、クラス名=ファイル名なので、OSのファイルシステムに依存します。
まぁ、クラスローダを自作してしまえば、そんな制約もなくなり、メソッド名同様、もっと自由にできちゃいます。


JavaVMって、Java言語のために作られたものだけれど、必ずしもJavaだけにとどめる必要はないんじゃないか、と思うのです。現に、JRubyScalaなど、JavaVMで動く他の言語も出てきています。
つまり・・・
オブジェクト指向で、
スタックマシンで、
メモリ管理はガーベージコレクションを使って、
スレッドの動きとか、
排他制御の仕組みがJavaVMの仕組みと同じで、
扱える基本型がint,long,float,double,UTF-8に限る*1
・・・ような言語であれば、JavaVMで実現できるんじゃないかな?

*1:boolean,short,char,byteはすべてint(4バイト整数)として扱われます。