まつもと ゆきひろです

In message "[ruby-ext:00777] Re: stack length over 60000!?"
    on 99/12/23, ymsd <ymsd / mail.m-net.ne.jp> writes:

|matz / netlab.co.jp (Yukihiro Matsumoto) さんは書きました:
|>  * インタプリタ全体が一つのスレッドで動作するようにする。
|>
|>  * eval.cを改造してあやしいところ(ほとんど全部)はグローバル
|>    ロックで保護する。
|>
|>前者の方が楽かなあ。
|
|BeOSでは "Windowを表示する == spawn thread"なのです。一応、
|GUIを扱いたいというのが目的なので、後者で試してみます。

それは知ってますが、GUI用拡張ライブラリによって、コールバッ
クはRubyスレッドに制御を渡すという手法が可能ではないかと。
tcltklibはRubyのスレッドと相性が悪く、Ruby上のひとつのスレッ
ドで実行させるために同種のハックを行ってます。これをちゃんと
スレッド的なしかけ(Queueとか)で実装すれば本物のスレッドを使
いつつ、Rubyインタプリタはシングルスレッドで動作するという状
況が実現できるのでは?

  Windowスレッド: callback { callback情報をqueueに }

  インタプリタスレッド: Queue待ち -> 処理

あ、でもWindowの操作ってのがWindowスレッド内でないとできない
のかなあ。茨の道。
                                まつもと ゆきひろ /:|)