迷走中

がしかし、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 されてるのか。