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

From: Yukihiro Matsumoto <matz / ruby-lang.org>
Subject: [ruby-dev:31920] Re: Import RubyGems to Ruby 1.9
Date: Mon, 1 Oct 2007 01:10:32 +0900
Message-ID: <E1Ic1N7-0005Ma-Pg / x31>
> |3. tkはどうしましょう。
> 
> 永井さんであるのは間違い無いです。問題は「1.9対応は大変」とおっ
> しゃっていたので、1.9に対応できるかどうかですが。

色々な件 (私事) が一区切りとなったので,
丁度,どうにかしようとし始めたところでした.

1.9 対応にはかなりの労力がかかりそうなのは事実で,
新しい thread に適切に対応するためには
tcltklib.c の大幅な書き直し (中枢部は完全な作り直し) が
必要になるのではないかと見ています.

まずは現状 (リビジョン 13578) でどの程度動作するものかを
調べていたのですが,今の状態では,少なくとも
イベントループ (Tk.mainloop) が main thread の上でしか動かず,
別スレッドからの命令も受け付けできないようです.

# 暫く前は Thread.new{require 'tk'; Tk.mainloop} ではなんとか動き,
# 別スレッドからの命令も受理できていたと思うのですが,
# 今はこの形式でも
# [BUG] cross-thread violation on eventloop_sleep()
# ってことになります.

サンプルを色々と動かして調べたいのですが,
現状は autoload がうまく働いていないようで,
----------------------------------------------------------
$ ruby
require 'tk'
TkButton.new
/usr/local/lib/ruby/1.9/tk/label.rb:6:in `<top (required)>': uninitialized constant TkLabel (NameError)
        from /usr/local/lib/ruby/1.9/tk/button.rb:5:in `require'
        from /usr/local/lib/ruby/1.9/tk/button.rb:5:in `<top (required)>'
        from -:2:in `<main>'
----------------------------------------------------------
だったり,
----------------------------------------------------------
$ ruby
require 'tk'
require 'tk/label'
TkButton.new
/usr/local/lib/ruby/1.9/tk/label.rb:6:in `<top (required)>':
uninitialized constant TkLabel (NameError)
        from -:2:in `require'
        from -:2:in `<main>'
----------------------------------------------------------
だったりします.
そのくせ,
----------------------------------------------------------
$ ruby
require 'tk'
TkLabel.new
TkButton.new
----------------------------------------------------------
は OK だったりするのがなんとも.(^_^;
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai / ai.kyutech.ac.jp