携帯開発用言語(1)

携帯の複数のデバイスをサポートしようと思うと、たいていJavaC/C++の両方のコードを書かないといけない。JavaからC/C++、あるいはその逆をうまく変換することが出来れば理想的なのだが、ポインタの問題ひとつとってみてもそう簡単な問題ではない。


そこでまあ、JavaC++の上限言語を開発して、その言語でコードを書いてJava/C++のコードに落とし込む、というアプローチを取ることにした。これが出来れば、JavaC++の両方のソースを一気に生成できて、単純計算では2倍仕事が出来て、2倍儲かるわけだ。200万儲かっていたのが400万、400万儲かっていたのが800万、800万儲かっていたのが1600万になるわけだ。ドラえもんバイバインみたいだな。イッツ ア ミラクル。やねうマジックさながらである。これが、有限会社やねう企画のほげほげソリューションその1だ。< しかし全然たいしたことなさそうな名前だな


ゲームなので、古典的タスクシステム*1を用いて設計されている。このタスクシステムは、フレームスキップを考慮しない場合、描画回数だけ移動関数を呼び出す。この移動関数は、一回分の移動を行なってリターンする。すなわち、移動関数は、自分の状態を持っていて、次回呼ばれたときに次の動作を行なわなければならない。よって、次回呼ばれるときのために次にジャンプするためのジャンプ先の関数ポインタを突っ込んだりする必要があったり何だったりするわけだ。じゃあその上位言語では関数delegateをサポートすればいいのか、という話になりそうだが、そんなことをしてしまうとJavaのほうにどう落とし込むのかが悩ましい。


そこで、このへんの問題をエレガントに解決するためにcontinuation(継続)をサポートするのだ。continuationは、近年のプログラミング言語では半ば常識と化しているので知っている人も多いだろう。Rubyのyield,C#2.0のIterator,Schemeのcall/ccだ。(つづく)