[ruby-list:42988] Re: Ruby/Tk+callcc

From: Hidetoshi NAGAI <nagai@...>
Date: 2006-11-08 13:00:54 UTC
List: ruby-list #42988
永井@知能.九工大です.

From: Hattori Kenta <hattori@isp.co.jp>
Subject: [ruby-list:42987] Ruby/Tk+callcc
Date: Wed, 8 Nov 2006 15:14:08 +0900
Message-ID: <m3mz72lb2o.wl%hattori@isp.co.jp>
> 早速の質問で恐縮なのですが、Ruby/Tkとcallccを使ってとあるプログラムを
> 作成しているのですが、実行時エラーに悩んでいます。
    (snip)
> Ruby/Tkを使うときはcallccの使用はあきらめた方が良いので
> しょうか。。。

私が勘違いしているのでなければ,残念ながら,
callcc はあきらめてもらうしかないと思います.

Ruby/Tk では,処理の流れが Ruby 側と Tcl/Tk 側とを
行ったり来たりしています.
そのため,Ruby 側で勝手にスタックフレームを書き換えられると
Tcl/Tk 側の内部状態が非常に高い確率で破壊されてしまいます.

同じような問題は例外発生においても起きるのですが,
その場合は一気にジャンプしてしまうのではなく,
呼び出し階層を逆に辿りつつ例外情報を渡していくことで
問題を回避することが可能です.

# tcltklib の内部はそのようになっているはずです.

しかし callcc の場合はそうした法則性がありませんから,
回避策の導入は不可能と言っていいと思います.
callcc を使わない方法での実装をお願いします.
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai@ai.kyutech.ac.jp

In This Thread