#こんにちは。最近Gauche(libgauche)を別アプリケーションからライブラリとして使用しているのですが、その中で独自のエラーハンドリングをするためにvmのexceptionHandlerを上書きして使用しています。
#この時、NewVM関数で新しく作成したVMがprotoのexceptionHandlerを引き継がないのは何か理由があるのでしょうか?
#アプリケーション側で再設定をすればいいだけですが、可能ならprotoから継承する値としてGauche側で再設定してしてくれるとアプリケーション側に余分な処理がなくなりバグが入りにくくなって助かります。
#少し話は変わるのですが、そもそもvmオブジェクト内のexceptionHandlerは、Gaucheの外のプログラムから上書きして独自のエラーハンドリング行いたい、という用途を想定しているのでしょうか?
#外からexceptionHandlerを設定するための関数やマクロが見当たらなかったので、このフィールドは触っていいの?と若干不安に思いながら使用しています。
#推奨されるのはScm_VMErrorHandlerかScm_VMGuardHandlerです (前者はエラー発生時の動的環境でハンドラを呼び出し、後者は動的環境をScm_VMGuardHandler呼び出し時点まで巻き戻した後でハンドラを呼びます。後者がSchemeのguardに対応。) もしこれらでうまくいかないケースがあれば改良の余地があるので教えてください。
#exceptionHandlerが置き換え可能になっているのは万が一のためのハックの余地を残してあるってだけなんで、実は置き換えた場合の影響についてあまり深く考えていなかったりします。一応Scm_VMWithExceptionHandlerというAPIも用意してはありますが。
#ただ、最初からデフォルトのグローバルなエラーハンドラを用意したいってときに、いちいち全ての呼び出しにScm_VMErrorHandlerを噛ませるのも面倒なのは確かですね。デフォルトエラーハンドラを設定できるAPIがあるといいかなあ。