[#17276] blocks and local variables — Takaaki Tateishi <ttate@...>
立石です.
まつもと ゆきひろです
At Mon, 3 Jun 2002 06:26:56 +0900,
まつもと ゆきひろです
なかだです。
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In article <1023423387.175193.27185.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
Yukihiro Matsumotoさんの
まつもと ゆきひろです
なかだです。
前田です。
At Fri, 7 Jun 2002 13:23:37 +0900,
まつもと ゆきひろです
Yukihiro Matsumotoさんの
まつもと ゆきひろです
Yukihiro Matsumotoさんの
なかだです。
nobu.nakada@nifty.ne.jpさんの
まつもと ゆきひろです
Yukihiro Matsumotoさんの
まつもと ゆきひろです
Yukihiro Matsumotoさんの
原です。
原です。
なかだです。
原です。
どうも西尾です。
なかだです。
At Sun, 16 Jun 2002 10:40:40 +0900,
なかだです。
At Sun, 16 Jun 2002 12:24:00 +0900,
なかだです。
At Sun, 16 Jun 2002 16:57:13 +0900,
なかだです。
どうも西尾です。
まつもと ゆきひろです
[#17315] Re: mswin32 での config.status の自動生成 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#17327] irb 0.9 alpha — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#17367] Ruby bcc32 on Win32 版のコミットについて — 小西 弘将 <konishih@...6.so-net.ne.jp>
小西 弘将です。
まつもと ゆきひろです
小西 弘将です。
こんにちは、なかむら(う)です。
小西 弘将です。
[#17384] avoid VC++ warnings — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#17392] [mswin32] exporting needless string literal — Tietew <tietew-ml-ruby-dev@...>
なかだです。
[#17393] [mswin32] static linked exts — Tietew <tietew-ml-ruby-dev@...>
[#17421] broken string when unterminated "#{". — WATANABE Hirofumi <eban@...>
わたなべです。
まつもと ゆきひろです
わたなべです。
In article <1023943870.232495.9282.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1023945463.297286.10112.nullmailer@picachu.netlab.jp>,
なかだです。
まつもと ゆきひろです
In article <1023987024.717469.15784.nullmailer@picachu.netlab.jp>,
なかだです。
まつもと ゆきひろです
In article <1024642728.541545.22623.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
In article <200206220646.g5M6kPY04591@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200206230606.g5N66RY15961@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
In article <1024667757.665595.25808.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1024750854.951300.30306.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1024887804.945188.6501.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1024895400.920419.6574.nullmailer@picachu.netlab.jp>,
[#17430] return value from methods of Array's subclass — "Shin'ya Adzumi" <adzumi@...>
あづみです。
あづみです。
まつもと ゆきひろです
あづみです。
[#17446] ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261)) — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
In article <200206160226.g5G2QO228336@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200206160749.g5G7nI231269@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
[#17471] break from proc-closure — m_seki@...
まつもと ゆきひろです
In article <1033663928.287610.25914.nullmailer@picachu.netlab.jp>,
なかだです。
[#17475] String#crypt always returns tainted string — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#17513] __END__ in literal — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
In article <200206211121.g5LBLl211556@sharui.nakada.kanuma.tochigi.jp>,
[#17579] Re: [ruby-cvs] ruby: * dln.c: remark definition rb_loaderror(). — WATANABE Hirofumi <eban@...>
わたなべです。
[ruby-dev:17309] update Tk (Re: Thread: deadlock trouble)
永井@知能.九工大です.
From: nagai@ai.kyutech.ac.jp
Subject: [ruby-dev:17212] Re: Thread: deadlock trouble
Date: Fri, 24 May 2002 09:52:48 +0900
Message-ID: <20020524095243K.nagai@ai.kyutech.ac.jp>
nagai> もう少し確認したいことなどもありますので,それが終わってから
nagai> commit (今度こそは自力で (^_^;) させてもらおうと思います.
というわけで,commit しました.
# ケアレスミスの修正をありがとうございました.> わたなべさん
# チェックが甘くて恥ずかしい限りです.
今回の Tk の修正はかなり影響の大きいものになっています.
CVS から入手して,試してみていただけると助かります.
ポイントは以下の通りです.
・mainloop を作り直した.
これにより,複数のスレッドを用いている際のレスポンスが向上したはずです.
さらに,スレッド切り替えのタイミングをコントロールするパラメータも
変更できるようにしましたので,アプリケーションのタイプや状態に応じて
mainloop スレッドのプライオリティを制御できます.
また,Tk.restart のことなども考え,root widget が破壊されても
mainloop を終了しないようにするパラメータも加えています.
・mainloop_watchdog の追加.
従来の mainloop は例えば Tk のコールバック中に Thread.new{b.invoke}.join
というようなことを行うと mainloop が停止して deadlock に陥りました.
mainloop を使うところで代りに mainloop_watchdog を使えば,
この問題を回避できます.
ただし,監視スレッドが動くことになり,負荷が増えますから,
特に必要なケース以外は従来の mainloop を使っておく方がいいでしょう.
・特定の safe-level でのコールバック実行の適正化.
従来のイベントループでは,イベントループ以外のスレッドからの操作の際に
$SAFE の指定がうまく機能しないケースがありましたので,対策を施しました.
・Tk でのパラメータ指定に Symbol を使えるようにした.
属性名指定などに Symbol を使えるようになりました.
ただし,キーボードを打つのが 1 文字減るだけだという話もあります.
・ウィジェットクラスでの new メソッドで,第 1 引数なしの記述を可能とした.
parent 属性で指定するという形式を可能としました.
以下のような記述が可能となります.
TkFrame.new('classname'=>'User'){|base|
pack
f = TkFrame.new(base, :classname=>'ButtonFrame').pack
TkButton.new(
:parent => f,
:text => 'Quit',
:command => proc{exit}
).pack(
:fill => :x,
:pady => 2
)
}
・キャンバスオブジェクトの new メソッドで,座標を属性で与えられるようにした.
従来の new メソッドでは,座標値をひとつずつ引数で並べねばなりませんでした.
これは,座標値の並びを配列で管理し,属性も Hash で指定したいという場合に
少々不便です (属性を後で与えるなどとすると Tk 呼び出しが増えて嬉しくない).
そこで coords 属性に座標値の並びを配列で与えることができるようにしました.
・TkAfter の強化.
TkAfter オブジェクトに登録される反復手続きなどにおいて,
ブロック引数でオブジェクト自身を受け取ることができるようにしました.
これに伴い,TkAfter#current_interval, TkAfter#current_args,
TkAfter#return_value メソッドを追加し,現在のインターバル値や
直前の反復手続きの戻り値などを受け取ることができるようにしています.
従来でも proc の共通スコープの変数を使えば同じようなことができたのですが,
それよりは少しながら自由度が上がっています.
・リソースデータベースをまともに活用できるようにした.
リソースデータベース自体は従来から使えはしましたが,
「ウィジェット名がわからない」,「アプリケーション名が指定できない」などで
正直なところ,使い物にはなりませんでした.
今回の修正で,きちんと使えるようになったと思います.
具体的には以下のいくつかの修正が効いています.
・Tk.restart で app-name と use を指定できるようにした.
app-name はアプリケーション名およびリソースクラスを決定します.
use は root widget を指定した WINDOW ID のウィンドウに埋め込みます.
これにより,一旦 require 'tk' をした後に restart することで,
Ruby/Tk アプリケーションに名前を付けたり,特定のアプリケーションの中に
埋め込んだりすることが可能となります.
従来でもアプリケーション名は Tk.appname で付けることはできましたが,
これではリソースクラスは変更されず,しかも複数起動すると
アプリケーション名には #1 などが付くため,リソースデータベースでは
使い物になりませんでした.
今回の修正でリソースクラスを指定できるようになりましたから,
リソースデータベースを有効に使えるはずです.
・ウィジェットクラスの new メソッドでウィジェット名を指定できるようにした.
widgetname 属性を追加しました.
従来,ウィジェット名は自動で付けられていましたが,
その場合,名前が特定できないことや特定できたとしても意味を持たない文字列
であることから,リソースデータベースでの指定には支障がありました.
これにより名前を指定することが可能になります.
例えばリソースデータベースに Xxx*quit.text: QUIT などと設定し,
Tk.restart('Xxx')
TkButton.new(nil, 'widgetname'=>'quit', 'command'=>proc{exit}).pack
Tk.mainloop
などと実行すれば,quit ボタンの表示文字列は 'QUIT' になります.
もちろん,リソースデータベースの項目はウィジェット生成前に
有効になっていなければなりません.
・ユーザ定義手続きをリソースデータベースで設定するためのサポートを追加.
TkOption::new_proc_class を追加しました.
これは,リソースデータベース上でのユーザによる手続きの定義を
受け付けるクラスを生成するものです.
リソースデータベースでのクラス名の他,パラメータとして,
定義できるメソッド一覧,実行の safe-level,メソッド追加を許すか,
親となるクラスの指定が可能です.
例えば resource-test というファイルに
*CMD.foo: {|*args| p [$SAFE, :foo, args]}
*CMD.XXX.bar: {|*args| p [$SAFE, :bar, args]}
*Button.command: ruby {p self; p $SAFE; TkOption::CMD::XXX.bar(1,2,3)}
などと設定(ボタンウィジェットなどの command 属性指定は,3 行目のように
ruby { ... }としてください)をしておき,
require 'tk'
TkOption.readfile 'resource-test'
p TkOption.new_proc_class(:CMD, [:foo], 1)
p TkOption.new_proc_class(:XXX, [:bar], 2, false, TkOption::CMD)
TkButton.new(:text=>'test').pack
Tk.mainloop
などと実行すれば,その効果を確認できると思います.
--
永井 秀利 (九工大 知能情報)
nagai@ai.kyutech.ac.jp