迷走中
がしかし、dynamic-wind でググッたら guile のマニュアルに hit。曰く
thunkの実行のどこかでdynamic-windの式の継続は非ローカルに エスケープされた場合、out-guardが呼び出される。dynamic-windの継続(continuation)に再入した場合、in-guardが呼び出される。
上記用語的に dynamic-wind の定義が以下になってます。
Function: dynamic-wind in-guard thunk out-guard
で、以下な仕様なのでしょうか
- thunk 実行中に他所の継続を起動して、とか例外がナニ、な場合に例外なく out-guard が呼ばれる
- 逆に thunk 中で継続が補足されて、全然別な場所で継続が呼び出された場合には in-guard が呼ばれる
ふぅん。。
このあたりの仕様って throw_cont_calculate_handlers() なナニになるんでしょうか。
うーん
ちょっとまだきちんとイメージできてない。
- thunk 実行中に他所の継続起動
- これは after (out-guard) が呼ばれないと駄目だな
- thunk 中で継続補足で他所で継続起動
- これは before (in-guard) ですな
てコトはどちらか、なんですね。あとはその順番がナニ。ってか、before 側は thunk に入る順に呼ばれるべき、なので reverse されてるのか。