- Lispの処理系なんかによくある機能だと思うんですけど、エラーが起きたときの環境でreplのプロンプトがでたりするのって、Scheme(Gauche)ではどうなんでしょうか。
- 再現性の低いバグとかの解析とか、1回だけの処理で起きたエラーからとりあえず復帰させて処理を継続させるとか、いろいろ便利(?)(katsujiro)
- Shiro(2005/09/23 19:27:00 PDT): 「充実したデバッグ環境」は1.0以降に手をつける予定です。 現在のGaucheでもエラーハンドラはエラー発生時の環境で呼ばれているんで、 そこでreplを呼べなくはないですが、ローカル環境を取り出すAPIが無いし エラーから復帰できるとは限らないんであまり使えないでしょう (エラーからちゃんと復帰するには、errorやraiseを呼び出す側で安全な リスタートポイントの継続を渡す機構が必要。でもCで書かれたルーチンから Scm_Error()で呼ばれた場合なんかは安全なリスタートは不可能なことが多い。 多くのCコードはScm_Error()から帰って来ることを想定していないから)。
なお、私自身は、Lisp処理系でエラー時にデバッガに入られるのを むしろ煩わしく感じてまして。もちろん解析したいとかエラーからその場で 復帰したいとかいうケースはたまーにあるんですが、それ以外のほとんどの 場合はデバッガを抜ける手間が増えるだけなんで。 直前のエラー時のコンテキストを保存しておいて、トップレベルに戻った後で デバッガに入ることを選択できたらいいなと思ってます (そういうScheme処理系が あったはず)。ただ、全部Schemeで書いてたら継続を取っとけばいいんですが、 Gaucheの場合Cパートとの絡みがあるので完全なリスタートは難しいかも。
Tag: REPL