[#17276] blocks and local variables — Takaaki Tateishi <ttate@...>

立石です.

127 messages 2002/06/02
[#17283] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/02

まつもと ゆきひろです

[#17294] Re: blocks and local variables — Takaaki Tateishi <ttate@...> 2002/06/03

At Mon, 3 Jun 2002 06:26:56 +0900,

[#17298] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/03

まつもと ゆきひろです

[#17332] Re: blocks and local variables — nobu.nakada@... 2002/06/06

なかだです。

[#17336] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/07

まつもと ゆきひろです

[#17337] Re: blocks and local variables — nobu.nakada@... 2002/06/07

なかだです。

[#17338] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/07

まつもと ゆきひろです

[#17339] Re: blocks and local variables — Tanaka Akira <akr@...17n.org> 2002/06/07

In article <1023423387.175193.27185.nullmailer@picachu.netlab.jp>,

[#17347] Re: blocks and local variables — Takaaki Tateishi <ttate@...> 2002/06/07

At Fri, 7 Jun 2002 13:23:37 +0900,

[#17352] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/07

まつもと ゆきひろです

[#17404] Re: blocks and local variables — "K.Kosako" <kosako@...> 2002/06/12

Yukihiro Matsumotoさんの

[#17411] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/12

まつもと ゆきひろです

[#17518] Re: blocks and local variables — "K.Kosako" <kosako@...> 2002/06/19

Yukihiro Matsumotoさんの

[#17521] Re: blocks and local variables — nobu.nakada@... 2002/06/19

なかだです。

[#17524] Re: blocks and local variables — "K.Kosako" <kosako@...> 2002/06/19

nobu.nakada@nifty.ne.jpさんの

[#17528] Re: blocks and local variables — matz@... (Yukihiro Matsumoto) 2002/06/20

まつもと ゆきひろです

[#17459] Re: blocks and local variables — NISHIO Mizuho <gha@...> 2002/06/16

どうも西尾です。

[#17460] Re: blocks and local variables — nobu.nakada@... 2002/06/16

なかだです。

[#17462] Re: blocks and local variables — Takaaki Tateishi <ttate@...> 2002/06/16

At Sun, 16 Jun 2002 10:40:40 +0900,

[#17464] Re: blocks and local variables — nobu.nakada@... 2002/06/16

なかだです。

[#17367] Ruby bcc32 on Win32 版のコミットについて — 小西 弘将 <konishih@...6.so-net.ne.jp>

小西 弘将です。

17 messages 2002/06/10
[#17368] Re: Ruby bcc32 on Win32 版のコミットについて — matz@... (Yukihiro Matsumoto) 2002/06/10

まつもと ゆきひろです

[#17369] Re: Ruby bcc32 on Win32 版のコミットについて — 小西 弘将 <konishih@...6.so-net.ne.jp> 2002/06/11

 小西 弘将です。

[#17370] Re: Ruby bcc32 on Win32 版のコミットについて — "U.Nakamura" <usa@...> 2002/06/11

こんにちは、なかむら(う)です。

[#17421] broken string when unterminated "#{". — WATANABE Hirofumi <eban@...>

わたなべです。

43 messages 2002/06/13
[#17422] Re: broken string when unterminated "#{". — matz@... (Yukihiro Matsumoto) 2002/06/13

まつもと ゆきひろです

[#17423] Re: broken string when unterminated "#{". — Tanaka Akira <akr@...17n.org> 2002/06/13

In article <1023943870.232495.9282.nullmailer@picachu.netlab.jp>,

[#17425] Re: broken string when unterminated "#{". — matz@... (Yukihiro Matsumoto) 2002/06/13

まつもと ゆきひろです

[#17426] Re: broken string when unterminated "#{". — Tanaka Akira <akr@...17n.org> 2002/06/13

In article <1023945463.297286.10112.nullmailer@picachu.netlab.jp>,

[#17439] Re: broken string when unterminated "#{". — nobu.nakada@... 2002/06/13

なかだです。

[#17440] Re: broken string when unterminated "#{". — matz@... (Yukihiro Matsumoto) 2002/06/13

まつもと ゆきひろです

[#17442] Re: broken string when unterminated "#{". — Tanaka Akira <akr@...17n.org> 2002/06/14

In article <1023987024.717469.15784.nullmailer@picachu.netlab.jp>,

[#17530] Re: broken string when unterminated "#{". — nobu.nakada@... 2002/06/21

なかだです。

[#17532] Re: broken string when unterminated "#{". — matz@... (Yukihiro Matsumoto) 2002/06/21

まつもと ゆきひろです

[#17539] Re: broken string when unterminated "#{". — Tanaka Akira <akr@...17n.org> 2002/06/21

In article <1024642728.541545.22623.nullmailer@picachu.netlab.jp>,

[#17540] Re: broken string when unterminated "#{". — matz@... (Yukihiro Matsumoto) 2002/06/21

まつもと ゆきひろです

[#17541] Re: broken string when unterminated "#{". — nobu.nakada@... 2002/06/21

なかだです。

[#17430] return value from methods of Array's subclass — "Shin'ya Adzumi" <adzumi@...>

あづみです。

12 messages 2002/06/13

[#17446] ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261)) — nobu.nakada@...

なかだです。

13 messages 2002/06/15
[#17454] Re: ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261)) — matz@... (Yukihiro Matsumoto) 2002/06/15

まつもと ゆきひろです

[#17461] Re: ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261)) — nobu.nakada@... 2002/06/16

なかだです。

[#17513] __END__ in literal — nobu.nakada@...

なかだです。

17 messages 2002/06/18
[#17516] Re: __END__ in literal — matz@... (Yukihiro Matsumoto) 2002/06/18

まつもと ゆきひろです

[ruby-dev:17309] update Tk (Re: Thread: deadlock trouble)

From: nagai@...
Date: 2002-06-04 10:25:39 UTC
List: ruby-dev #17309
永井@知能.九工大です.

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

In This Thread

Prev Next