携帯開発用言語(2)
continuationを用いれば次のようにコーディングできる。
class Hoge {
coroutine void some_callback_function(){
A(); yield();
B(); yield();
while (C()){
D(); yield(); E(); yield();
}
F();
}// 呼び出し側
static void test(){
some_callback_function.Start();
while (some_callback_function.MoveNext())
;
}
}
これは、次のようにFSM(有限状態マシン)モデルとして以下のように等価変換される。
class Hoge {
void some_callback_function(){
retry:;
switch(state){
case 0: A(); state++; break;
case 1: B(); state++; break;
case 2: if (!C()) { state = 4; goto retry; }
D(); state++; break;
case 3: E(); state=2; break;
case 4: F(); state++; break;
}
}
int state;// 呼び出し側
static void test(){
state = 0; // some_callback_function.Start();
while (true){
some_callback_function(); // some_callback_function.MoveNext()
if (state==5) break;
}
}
};
可読性を犠牲にすることもないし、また、タスクシステムでの制御に関数ポインタ等を持ち出す必要もなくなる。これによりJava/C++共通の言語基盤を与えることが出来るというわけだ。この他にも細かい工夫がいろいろあるんだ。詳しくはこの言語を実装してから書くことにする。<まだ構想だけなので。