Coroutine を FSM コードへ変換したい
この辺ひどいよね!
id:melponがコンパイルタイムCoroutineを作ったので近々公開予定だとか!
id:DigitalGhostさんがあらわれた - Faith and Brave - C++で遊ぼう
melponさんは、「俺、コンパイル時Coroutine書いたあるぜ」と豪語した
本の虫: 旅日記
めるぽんさんがmpl::stringで、Coroutineの機能を追加したコンパイルタイムC++コンパイラを一夜で作りあげた
ターヘル・アナトリア(東京見聞録)2 - デ-mk6
スタック切り替えの実装は、
- ポータビリティが低い
- スタック領域がメモリを圧迫する
- どれぐらい使うかは事前に分からないので比較的多めに取ったりとかするんだけど、そうすると1個の簡単な処理を行うコルーチンでもそれなりにメモリを消費するので、多く作るのを敬遠してしまう。もっと気軽にぽんぽんと作りたい。
といったことがあって Boost.Coroutine を使える機会が結構少ないので、まあコンパイルタイムなのはありえないとしても、プリプロセス段階で何かのツールに掛けて yield 使ったコードを C# みたいに FSM に変換して実装できたらなぁと考えています。
参考になりそうなのは
これかなぁ。
これを C++ で実装するだけでも難しそうだけど、C# の Iterator Block が関数の中で yield しないといけないのに対して、C++ の Coroutine は self さえ渡せば関数を越えてどこでも yield できるというのが余計に難しそうな気がする。
まだまともに考えてないけど、これができれば少なくとも C++ が使える環境ならどこでも Coroutine が使えるようになるので、いつかやってみたいなー考えがあったり。というか誰か(id: