« リソースIDの採番をずらす | メイン | TJS2 が少し動くように »

2011年10月08日

Android:: TJS2 for Java

    

C++BuilderXE2 が、Mac のクロスコンパイラを備えていると言うことで、吉里吉里2の Mac版を比較的楽に作れるかなと思い購入したものの、VCL から FireMonkey への移行は手作業と言うことで、普通に移植工数がかかることがわかった。
はじめから、FireMonkey ベースで作っていれば、Win/Mac 両対応になるんだけど。
普通に工数がかかるとなると、Mac版を作るのは躊躇する。
Mac は持っていないし、技術的好奇心だけだから。
技術的好奇心 + 自分が欲しいとなると、Android版になるし。


Android で使うスクリプト言語は何がいいか検討していた。
Squirrel の Java版はあるようだけど、安定性など怪しい。
やはり、Rhino かと思ったが、プロトタイプベース・オブジェクト指向ってことで躊躇する。
そして、TJS2 を Java に移植することにした。

構文解析器の bison 部分をどうするかだけど、再帰下降法で書き下すことにした。
Java 用の bison やそれに類するものはいろいろとあるようだけど、手書きの方が結合部分や移植性等なにかと都合がいいかと思ったわけだけど、実装中これは失敗したかもしれないと思った。
可読性や構文の変更を考えると、圧倒的に bison などの方が良いけど、ほぼ構文が固定されているのであれば、その辺りはそれほど気にすることもないというのもあったわけだけど。

TJS2 を大きく分けると、字句抽出器、構文解析器、構文木→バイトコード、VM 、組み込みクラス群と 5工程ある。
構文解析器は、TJS2 のメイン構文とプリプロセッサ部分、日時部分の 3つ。
字句抽出器もそれに伴いあるわけだけど、メイン以外はそれほど大きくない。
プリプロセッサ部分は、字句抽出器と構文解析器(含む評価)は完成した。
久しく本格的なスクリプト言語のインタプリタに触れていなかったので、プリプロセッサ部分は再帰下降法で書くのにいい練習になった。
プリプロセッサ部分はちょっと高機能な電卓みたいなものなので、良くある例で実装できる。
現在は、メイン部分の字句抽出器と構文解析器部分をデバッグ中。
再帰下降法で書かれた構文解析器をデバッガで追うのは少し楽しい。

C++ → Java での一番問題は、Java がポインタを明示的に扱えないことだろうか。
なんだかんだでほぼ全書き換えになってる。
後は演算子のオーバーロードがないのも辛い。

TJS2 for Java で気になるのは、コンパイル時間とバイナリサイズ。
これらはできあがってみないと何とも言えないけど、あまりにコンパイル時間が長いと起動に時間がかかって困る。
ある程度はスプラッシュでも出してしのげるが、あんまり長いとバイトコードでファイル書き出しして、それを読み込むようなことも考えている。
バイナリサイズは、数MB とかになると Android で手軽に組み込むのに躊躇してしまう。
それほど大きくならないようであれば、気軽に組み込んで TJS2 で Win上で手軽に開発出来るように持って行けるんだけど。
実行時間はそれほど心配していない。
許容範囲内だろうと思っている。
動かしてみたら爆死ってこともありえるが。
まあ、なんにしてもまずは淡々と実装していくしかない。



投稿者 Takenori : 2011年10月08日 18:47




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