永井@知能.九工大です.

ruby-dev と ruby-list との両方に送らせていただいてます.

下記の通り,safeTk を含む複数のインタープリタをサポート
するような修正と追加ファイルとを CVS に突っ込みました.
予想よりも大幅に手間取りましたが,なんとか間に合わせる
ことができました.(^_^) 

本日の公開が予定されている新しい 1.8.0 の preview 版が
マルチインタープリタサポートの初のリリースとなります.
ぜひ試していただいて,バグレポートを送ってていただけると
嬉しいです.

使い方は sample/safe-tk.rb を見ていただくのがいいと思い
ます.従来の単独インタープリタサポートとの互換性がほぼ
維持できていると考えています.

safeTk など複数のインタープリタを必要とする場合の違いは,
従来の require 'tk' の代わりに require 'multi-tk' とする
くらいでしょう.デフォルトのマスターインタプリタは自動生
成しますから,そのままデフォルトマスターを使う限りは従来
と全く違いはないはずです.あとはマスターインタープリタで
も通常のスレーブインタープリタでも,Tcl/Tk のセーフベース
に基づく safeTk インタープリタでも,インスタンスとして生
成して操作してください.

この際のポイントは,どのインタープリタにおける操作であっ
てもスクリプトの書き方に違いが存在しない点です.
sample/safe-tk.rb を見ていただくとわかるように,例えば
「 button widget と label widget とを生成して pack する」
といった処理を記述する際に,個々の命令 (TkButton.newなど) 
に対してそれを処理するインタープリタを指定するなどは必要
ありません.一連の処理を手続きオブジェクト化して,処理対
象のインタープリタに渡してやるだけです.一連の処理の記述
形式は従来のままですから,その手続きオブジェクトをそのま
ま call すればデフォルトマスターが選択されてその上で処理
が行われます.インタープリタの選択は,手続きオブジェクト
を渡す先を変えるだけです.

# もちろん,セーフベースで使用が禁止されている命令は
# 実行できませんが.(^_^)

このように,従来の tk.rb と比べて完全なアッパーコンパチ
であると考えて良いはずですが,その代わり,インタープリタ
管理のためにスレッドやスレッドグループを多用しており,負
荷が大きいものになっています.目的に合わせて使い分けてい
ただくのが良いと思います.

> nagai       Sun, 27 Jul 2003 19:35:06 +0000
> 
>   Modified files:
>     ruby/ext/tcltklib:
>       MANIFEST MANUAL.euc tcltklib.c
>     ruby/ext/tk:
>       MANIFEST
>     ruby/ext/tk/lib:
>       README tk.rb tkafter.rb
>   Added files:
>     ruby/ext/tcltklib/demo:
>       safeTk.rb
>     ruby/ext/tk/lib:
>       multi-tk.rb
>     ruby/ext/tk/sample:
>       safe-tk.rb
>   Log:
>     multi-tk.rb : (new) library to support multiple Tk interpreters (high level)
>     tcltklib.c : add some methods to support multiple interpreters (low level)
>     MANUAL.euc : modify descriptions
>     tcltklib/sample/safeTk.rb : (new) sample : how to use safeTk interpreter
>     tk/sample/safe-tk.rb : (new) sample : how to use multi-tk.rb
>     tk.rb, tkafter.rb : bug fix and add feature to supprt multi-tk
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp