C++からJavaScriptへ変換し、さらにJavaへ移植する話の続き
C++ソースからJavaScriptソースを生成するツールである、emscriptenをちみちみいじってたんです。
生成されたJavaScriptからJavaへ移植する作業は、
手作業でやってもそれほどたいした手間じゃないと
最初は踏んでたんですけど、
実際やってみると
なかなか厳しい部分がありますね。。。
C++の関数ポインタを、emscriptenではfunctionの配列として再現するようなんです。
これをJavaに直すにはどうすればいいか悩んだんですね。
Javaだとメソッドを配列に入れることはできませんから、まあ普通にやるなら
intefafeを作ってそれを実装したクラス郡を用意して、
それのインスタンスを配列に入れれば、
だいたい関数ポインタと似たような感じになります。
が、
なりますが、
用意するものがすごく多すぎてちょっとめんどくさいですよね。
そんな感じで
んーってうなりながら1ヶ月ぐらい考えてしまいました。
ちょっと発想を変えたほうがいいということで、
なんかもっと楽な方法はないかなーと考えんです。
そういえば、JVMで動く言語はJavaだけではないんです。
pythonとか、rubyとかもJVM上で動く処理系があったのを思い出しました。
それで調べてみたら、JavaScriptをJVM上で動かす実装っていっぱいあったんですね。
Rhinoとかが代表的なようです。
Rhinoはライノーと読むらしいです。
JavaScriptのソースからclassファイルを生成するコンパイラか、インタプリタとして使えるらしいです。
ということは、
- C++のエミュレータのソースを、emscriptenでJavaScriptに変換する
- 変換されたJavaScriptのソースをDOMやCanvasに依存する部分などを修正する
- 修正したJavaScriptのソースをRhinoでclassファイルに変換する
という手順で、Javaに持っていけるような気がしてきました。
Rhinoで作ったclassファイルであっても、J2MEのベリファイアにかければ、DoJa(iアプリ)でも動くんじゃないかなあ?
このあたりは試してみる必要がある気がしますが、これがうまくいけば、かなり楽ができそうです。