From: Hidetoshi NAGAI Date: 2007-05-17T18:27:06+09:00 Subject: [ruby-list:43531] Re: [情報提供依頼] Windows 上の Ruby/Tk について 永井@知能.九工大です. From: Hidetoshi NAGAI Subject: [ruby-list:43528] [情報提供依頼] Windows 上の Ruby/Tk について Date: Thu, 17 May 2007 15:47:48 +0900 Message-ID: <20070517.154659.104060802.nagai@ai.kyutech.ac.jp> > [ruby-list:43522] でも触れたのですが, > Windows 上の Ruby/Tk の動作が非常に遅くなるという現象があります. > 最初は 1.8.4 と 1.8.5 との間での変更の影響と考えていたのですが, > そういうわけでもないようです. テストしていただいた方々にお礼を申し上げます. 問題は Widget Demo 自体にありました. 1.8.4 と 1.8.5 との間で Widget Demo に変更を加えたことを 完全に忘れていて,両者で変更がないと思い込んで調べていました. お騒がせしましたことを深くお詫び致します. 本当にすみませんでした. 以下は興味のある方のみお読み下さい. Widget Demo の変更は, 「読み込んで実行するサブスクリプト上で定義される関数型メソッドが グローバルスペースを汚染してしまう. それを避けるために単純に無名モジュールなどで実行しようとすると 関数型で定義しているはずのメソッドが見えなくなってしまう」 という問題に対処するためのものでした (だったはずです). Wideget Demo のポイントは,実行中に表示したサブスクリプトのソースを テキストウィジェット上で編集し,それを実行して試すことができる点です. これを安心して行うには,簡単な sandbox 機能を持たねばなりませんが, 上記の問題はこの機能の実現を阻害するものとなります. そこで,スレッドや method_missing を活用して pure Ruby の範囲で 仮想的なトップレベルとなるモジュールを取り扱えるようにしたのが 問題となっている変更↓です. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ext/tk/sample/demos-en/widget?r1=9650&r2=10505 # Ruby 本体での C レベルでの対応は断られましたので.(^_^; スレッドや処理が増える分,遅くなるのは当たり前なのですが, 普段の開発環境である Linux 上ではさほど気にはならない程度で あったために問題はないと判断していました. # 抽象的ですが,「パッ」が「プパッ」と軽く一呼吸加わる程度の遅れ. ところが Windows では,これが雲泥の差になってしまったということです. 結局のところ,油断してチェックしていなかった私が悪いのですが, OS の違いでここまで極端に影響が異なるとは思っていませんでした. 今この瞬間には,この点を今後どのように修正していくべきかを 思いついていません. テストしつつの検討が必要なようで,時間がかかりそうです.(;_;) -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp