まつもと ゆきひろです

これもruby-dev行きですね.今後のフォローはそちらに.

In message "[ruby-list:7315] recovery of exception"
    on 98/04/03, tateishi / sy.is.noda.sut.ac.jp <tateishi / sy.is.noda.sut.ac.jp> writes:

|立石です。

|rubyの処理では当然こうなるようになっている
|のですが、例外が発生したらbegin..end内での
|変更をすべて破棄できる仕組みを組み込めない
|ものでしょうか?

このためにはまず「変更とはなにか(どこまで復旧するか)」を定義
する必要があります.それから「いつか発生するかも知れない変更
に備えて状態を保存するコスト」または「『現在は復旧可能モード
であるから変更前に状態を保存しておく』ようにするコスト」との
天秤になると思います.

ところで,rubyで変更されうるものは

  * ローカル変数
  * グローバル変数
  * インスタンス変数
  * 定数
  * メソッド
  * メソッド呼び出しを経由するオブジェクトの状態の変更

などがあり,これを全部復旧可能にするのは現実的ではないと思い
ます.また,一部(たとえばローカル変数だけ)復旧させることにど
れだけ意味があるかというのは検討が必要だと思いますが,私個人
は一貫性の観点から考えると「やるのもやらないのも全部」が望ま
しいと思ってます.

ということで,私の意見としては「多少手間でも明示的に復旧され
るのが望ましい」ということにしておきます.もっともこのような
状態の復旧を支援する機構というのは考えられるかも知れません.

                                まつもと ゆきひろ /:|)