Future(Promise)の実装
継続モナドをベースにしているように見えるやつ(構築時に継続を受け取る(call/ccっぽさ)) ECMAScript, .NET, Scala
コールバックの抽象化
Pros
既にコールバックがAPIとして存在している場合に有用
コールバックとして継続を渡せばいいので、新しいFutureを作るのが簡単
Cons
コールバック関数の変数キャプチャのためにヒープを消費する
Rust
他にもあるのか?教えてほしい
ステートマシンの抽象化
現在の状態とイベントループで受け取ったイベントで状態遷移するみたいなコードを抽象化する
Pros
ヒープを消費しない実装を作れる(=スタック上に置ける)
コールバックベースだと処理の完了を親に通知するみたいな処理になるが、コルーチンモナドベースだと親が子に処理が完了したか聞きに行くから(?)
Cons
新しいFutureのプリミティブを作るのが難しい
毎回親からpollで辿っていくとパフォーマンス的にアレなので(?)Wakerと呼ばれる構造体を用意してイベントの発生を通知する
色々と大変そう
(ワンショットな)継続を振り回すのに対応するコルーチンがどんなものでも存在するのか?
そうじゃないとしたら対応するものが存在するにはどんな制約がある?