« 吉里吉里2/Zに脆弱性があると言う話 | メイン | Android Studio 1.5 で NDK を使ったビルドを試す »

2015年12月20日

吉里吉里Java:: 羽々斬をGitHubに移動

    

羽々斬に関して問い合わせがあったので、ついでに SourceForge から GitHub へ移動した。
場所はここ
今のところソースコードを単純に移動しただけ。

元々 Eclipse で開発していたけど、ビルドシステムを Gradle にすればマルチプロジェクトで Android 用と Desktop 用でばらばらになっていたソースコードをうまく共存できるんじゃないか?と少し触ってみた。

羽々斬は、jp.kirikiri.tjs2 と jp.kirikiri.tvp2 の 共通部分と jp.kirikiri.tvp2env の環境依存部分で出来ていて、tvp2 と tvp2env は相互に参照している。
最初はマルチプロジェクトで共通部分を core、環境依存部分をそれぞれ android/desktop として作ろうとしたけど、相互に参照しているせいでうまくいかなかった。
あれこれ試したところ、単純にソースセットの指定に両方渡してやれば Android Studio でツリーにソース表示されるし、ビルドも通った。
sourceSets { main { java.srcDirs = ['src/main/java', '../core/src'] } }

Android 側はこれでいいんだけど、問い合わせしてくれた人は Mac でプレイできるようにするために羽々斬使えそうと言うことだったので、上の対応じゃなくて、Eclipse でうまくやるのが必要。


羽々斬リリース当時 Android の非力さ等で色々と微妙だった部分は、現在の環境だとだいたい解消されているし、いくつか今の状況に合わせて修正すれば、結構実用的かもしれない。
RoboVM も正式バージョンがリリースされているので、羽々斬→RoboVM→ネイティブ(iOS/MacOSX/Linux) を吐くと言うのも、下まわり何とかすれば出来そうな状況になってるはず。
RoboVM は OSS 版とサブスクリプションモデルの有料版と言う形になっていた。

羽々斬開発当時は Pure Java で作ろうとしていたけど、今から手を入れるのなら、いくつかは C/C++ で作ってしまった方がいいと思える。
確かあの頃は C/C++ で作れるかどうかは何とも言えない時期だった。
画像処理周りの SIMD 使うところなどは、C/C++ で書いて環境ごとに so/dll 準備するのが速くなるし妥当だろう。
音周りも環境依存大きいからネイティブで書いてしまっていいかもしれない。

もっとも悩むところは、吉里吉里Zに手を入れて Android 版を作るのか、羽々斬を頑張ってマルチプラットフォームを推進する方がいいのか、どちらが工数少なくて、将来も楽そうなのかと言うところだろうか。
Android 版をネイティブで書くと言っても Android はやっぱり Java 主体で、C++ のみだと辛いところがある。
何か所か Java の呼び出しが必要になってくるから、Java 主体の羽々斬に C++ 足して行くのか、C++ 主体の吉里吉里Zに Java と環境依存コード足して行くのか。

Android 5.0 以降での ART が想像以上に強力で、Java で書かれた TJS2 のコンパイラ部分とか普通に速くてネイティブで書く必要ない感じ。
画像処理などの SIMD が必要なところは意味ありそうだけど、その辺り RenderScript で頑張ろうと思えばできる。
RenderScript で書くと楽だけど、CPU のみなら SIMD で頑張った方が速いだろうと思う。
ただ、RenderScript はマルチスレッドでやってくれるから、マルチコアだとわからない。
ネイティブでうまくマルチスレッド化すればいいんだろうけど。

将来の修正なども考慮して出来るだけ共通にしたいと言うのなら、吉里吉里Z~ってのがいいんだろうけど、初期の対応 OS で考えるのなら Windows のみの Z に比べて、それ以外を網羅する羽々斬も共通部分多いわけで……
RoboVM は、Java のバイトコードからネイティブ吐いてくれるけど、Windows 向けがないのが残念。
元々は iOS/Android のソースをJavaで共通化するみたいな感じだから仕方ないのかもしれない。
内部的には、LLVM IR を途中で吐いていて、いくつかサポート用の関数等を加えてリンクする感じだから、そのサポート用の関数周りを準備してやれば Windows 用バイナリも吐けるように出来そうな感じではある。


投稿者 Takenori : 2015年12月20日 18:11




comments powered by Disqus
Total : Today : Yesterday : なかのひと