FSM vs Fiber

http://www.antun.net/tips/howto/task.html

にあるタスクをいかに C++ で簡単に実装するかを長年考えてきました。
以降ではこのタスクを Galaxian Task と呼びます。Galaxian Task は関数の途中で中断、復帰できないため、いくつも関数を分けて、関数間でパラメーターを受け渡すために面倒な処理が必要です。これが無くなれば、このシステムはかなり使えます!
しばらくして Fiber, MicroThread と呼ばれるものが僕の求める Galaxian Task と同じであると知りました。

http://www.radiumsoftware.com/0210.html#021016

しかし、この Fiber の実装にはアセンブリを組む必要(Cであればsetjmp,longjmpで実装できますが、C++ではこのテクニックは使えません)があり、移植性に難があるため止めていました。そこで lambda 風の奇妙な Fiber クラスを作ったのですがちっとも使い物になりません。その後、会社で PowerPC 用のアセンブリでまじめに書いた Fiber クラスを作ってもらったのですが、これも流行りませんでした。
そんな中、FSM(有限状態マシン)クラスが社内で作られ、かなり流行りました。やはり、普通の C/C++ で組まれているため、利用者側にも保守側にも無理が無かったのが勝因であろうと思います。GPG(Game Programming Gems)でもタスクの使い出があると思われる AI 記述にメッセージと FSM を利用しています。ですが、FSMにも面倒な面はあります。やはり、いくつもステートを作り、その間の遷移を自分で書かなければならないのです。また、FSM は本来外部からのメッセージ送信により自分の状態を変えます。AI 等ゲームで求められる Fiber 的な処理は自律的にどんどん内部状態を変化させて行きます。というか、Ready!と表示してから、1秒待って Go! と表示するのに、3つも状態を作るのは面倒です。
というわけで、最近しばらく別のアプローチによる Fiber 作りを検討してきました。なんですが、う〜ん、何をやってもしっくりこない。やはり、この分野では FSM を使うのが C++ では妥当なのでしょうかね。何か情報をお持ちの方、教えてください。