[#4060] ruby-tk on Windows — Eiji-usagi-MATSUmoto <ematsu@...>

うさぎです。

70 messages 1997/09/03
[#4061] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/03

まつもと ゆきひろです

[#4064] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/03

>まつもと ゆきひろです

[#4071] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/03

[#4075] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/03

助田です

[#4089] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/04

助田です

[#4165] Re: ruby-tk on Windows — Masaki Suketa <suke@...> 1997/09/08

助田です

[#4168] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/08

[#4169] Re: ruby-tk on Windows — Shin-ichiro HARA <sinara@...> 1997/09/08

原です。

[#4170] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4172] Re: ruby-tk on Windows — WATANABE Hirofumi <watanabe@...> 1997/09/08

わたなべです.

[#4174] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4187] Re: ruby-tk on Windows — KIMURA Koichi <kkimura@...> 1997/09/08

[#4188] Re: ruby-tk on Windows — matz@... (Yukihiro Matsumoto) 1997/09/08

まつもと ゆきひろです

[#4190] Re: ruby-tk on Windows — sakamoto@... (Sadayuki Sakamoto) 1997/09/08

酒本です。

[#4083] ruby 1.0-970903 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

14 messages 1997/09/03

[#4278] Is there any english documentation ? [FreeBSD ports] — Eiji-usagi-MATSUmoto <ematsu@...>

うさぎです。

11 messages 1997/09/11

[#4313] mail address class — akira yamada / やまだあきら <akira@...>

36 messages 1997/09/15
[#4406] Re: mail address class — akira yamada <akira@...> 1997/09/18

[#4408] Re: mail address class — keiju@... (石塚圭樹 ) 1997/09/18

けいじゅ@日本ラショナルソフトウェアです.

[#4506] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/09/22

[#4637] Re: mail address class — keiju@... (石塚圭樹 ) 1997/09/25

けいじゅ@日本ラショナルソフトウェアです.

[#5042] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/17

[#5043] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/18

前田です。

[#5044] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/18

[#5047] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/18

前田です。

[#5053] Re: mail address class — akira yamada / やまだあきら <akira@...> 1997/10/19

[#5067] Re: mail address class — shugo@... (Shugo Maeda) 1997/10/20

前田です。

[#4324] ruby seminar — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

37 messages 1997/09/16
[#4337] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/16

前田です。

[#4339] Re: ruby seminar — matz@... (Yukihiro Matsumoto) 1997/09/16

まつもと ゆきひろです

[#4387] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/18

前田です。

[#4391] Re: ruby seminar — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/18

うさぎ@勤務地は西田幾太郎生誕の地です。

[#4407] Re: ruby seminar — shugo@... (MAEDA Shugo) 1997/09/18

前田です。

[#4366] socket — Kikutani Makoto <kikutani@...>

きくたにです。

21 messages 1997/09/17
[#4389] Re: socket — matz@... (Yukihiro Matsumoto) 1997/09/18

まつもと ゆきひろです

[#4449] Bug?? (ruby-1.0-970911) — Yuji Shigehiro <sigehiro@...>

ruby-1.0-970701 から, ruby-1.0-970911 にバージョンアップしたところ,

16 messages 1997/09/19

[#4510] python doc — Kikutani Makoto <kikutani@...>

ここで聞くべきことじゃないのですが、きっと知ってる人がいるだろう

34 messages 1997/09/22
[#4555] Re: python doc — Kikutani Makoto <kikutani@...> 1997/09/24

きくたにです。

[#4562] Re: python doc — gotoken@... (GOTO Kentaro) 1997/09/24

きくたにさん>

[#4563] ruby animal (Re: python doc) — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4567] Re: ruby animal (Re: python doc) — gotoken@... (GOTO Kentaro) 1997/09/24

まつもと ゆきひろさん>

[#4577] Re: ruby animal (Re: python doc) — Masaki Suketa <suke@...> 1997/09/24

助田です

[#4556] install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...>

30 messages 1997/09/24
[#4559] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4574] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4580] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4595] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4603] Re: install problem of mudule for postgreSQL — Eiji-usagi-MATSUmoto <ematsu@...> 1997/09/24

うさぎです。

[#4612] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4614] Re: install problem of mudule for postgreSQL — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4616] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/24

[#4622] Re: install problem of mudule for postgreSQL — matz@... (Yukihiro Matsumoto) 1997/09/24

まつもと ゆきひろです

[#4632] Re: install problem of mudule for postgreSQL — Yuichiro Tateno <tateno@...> 1997/09/25

[#4738] ruby 1.0-970930 install failed — Yoshiyuki Kusano <kusano@...>

草野@構造計画です.

15 messages 1997/09/30

[#4741] rbc.rb — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

33 messages 1997/09/30
[#4759] Re: rbc.rb — shugo@... (MAEDA Shugo) 1997/10/02

前田です。

[#4773] Re: rbc.rb — keiju@... (石塚圭樹 ) 1997/10/03

けいじゅ@日本ラショナルソフトウェアです.

[#4778] Re: rbc.rb — shugo@... (MAEDA Shugo) 1997/10/03

前田です。

[#4793] Re: rbc.rb — keiju@... (石塚圭樹 ) 1997/10/04

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:4289] Re: [Q] tk ext...

From: Yuji Shigehiro <sigehiro@...>
Date: 1997-09-12 04:34:35 UTC
List: ruby-list #4289
はじめまして. 重弘といいます.

私は, 研究テーマが VLSI のレイアウト設計自動化 ということになってまして,

・ オブジェクト指向
・ グラフィックのサポート(それも, 話題の tcl/tk らしい)
・ お手軽なプログラミング

という甘い響きに誘われて, ruby/tk を使ってみました.

たくさんの線を引くスクリプトを書いてみたのですが...

          余りにも遅い.

おかしいなあ, と思ってソースを見てみると,

          なるほど, wish を子プロセスとして起動するのか.
          確かに移植性は良いけど...


> Date: Fri, 12 Sep 97 11:00:09 +0900
> Subject: [ruby-list:4283] Re: [Q] tk ext...
> Message-Id: <m0x9L8S-0000WPC@jdcpc13.nrj.ericsson.se>

> 2万個のデータのときは(時間がかかったものの)動きました。
> 10万個のデータのときはあまりにもマシンがスローダウンしたので
> 中止しました。topで見てるとwishの%MEMが70%以上で、スラッシング
> 起こしてる模様(32MBしないので)。言語上の制約はないようですね。

定性的なデータは取りませんでしたが, 私がやっても似たようなものでし
た. ps で見ると, wish の負荷がどんどん上がっていって, とんでもないこと
になりました.

原因は, おそらく以下の通りです.

普通, ウィンドウアプリケーションは, イベントループの中でボタンを押すな
どのイベントを受け取って, コールバックで線を引いたりします. (菊谷様の
プログラムは, ぱっと見たところ, イベントループに入る前に線を引いてしま
うみたいですが, wish が子プロセスで動作している以上, 事情は同じです.) 
普通の X 等のアプリケーションであれば

[A]

1. イベント発生.

2. (ボタンを押したのであれば, ここで, ボタンを押された絵に変える).

3. コールバックを実行する (ここで線を引きまくるが, 線を引くというリク
エストはライブラリが一旦保留して, 実際に描画されるのはもっと後).

4. コールバックから帰って来る (ここでボタンを元の絵に戻すのか??)

5. イベントループに戻る. 処理すべきイベントが残っていなければ, ここで
はじめて, 実際の描画処理がまとめて行われる.

となりますが, ruby/tk の場合は

[B]

  (ruby)                               (wish)

1.                                     イベント発生.

2.                                    (ボタンを押したのであれば,
                                       ここで, ボタンを押された絵に変える).

3.                <------------------ コールバックを実行する要求.

  (想像ですが, 多分)
   ack を返す     -------------------> (+)

4.
        線を引く --------------------> 要求を受け取る
                 <-------------------  (想像ですが, 多分) ack を返す
                                       (*)
        線を引く --------------------> 要求を受け取る
                 <-------------------  (想像ですが, 多分) ack を返す
                                       (*)
          .....

となります. で, 問題なのは, (*) の部分でして,

もし一瞬でも ruby からの要求が途絶えると, wish は

    (ボタンを元の絵に戻して) 線の描画を開始してしまいます.

なぜなら, wish にとってのコールバックは (+) で既に終わっていますから.
 ↑
 ↑   (現在の ruby/tk の実装では, ruby と wish の通信チャネル(パイプ)が
 ↑    ひとつしかないので(←想像),
 ↑これを避けるのは困難だと思います.)

wish の canvas は, 線を引く要求があったら, 単に線を引くだけではなく, 
線の情報を後で変更できるように内部に蓄えたりするので, かなり遅いのでは
ないでしょうか? さらに, まとめて引くのではなく, ruby からの要求が途絶
えたときに数本ずつ引くので, 致命的に遅くなります. (実際にコールバック
で線を引くスクリプトを組んでみると, 押したボタンがすぐに戻って描画をは
じめる様子が分かります.)

参考までに, テストに使ったスクリプトを付けます.
draw を押すと, 500 本の線を 100 回引きます.
最初に線を引かずにループに必要な時間を計測し, その後で実際に引きます.
(ちなみに, マシンが重くて動かなくなっても, 私は責任を持てません.)

 ----
#! /usr/local/bin/ruby

require "tk"

def drawlines()
  print Time.now, "\n"

  for j in 0 .. 99
    print "*"
    $stdout.flush
    if (j & 1) != 0
      col = "blue"
    else
      col = "red"
    end
    for i in 0 .. 499
#      TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col)
    end
  end

  print Time.now, "\n"

  for j in 0 .. 99
    print "*"
    $stdout.flush
    if (j & 1) != 0
      col = "blue"
    else
      col = "red"
    end
    for i in 0 .. 499
      TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col)
    end
  end

  print Time.now, "\n"
#  Tk.root.destroy
end

$a = TkCanvas.new{
  height(500)
  width(500)
}

$b = TkButton.new{
  text("draw")
  command(proc{drawlines()})
}

TkPack.configure($a, $b, {"side"=>"left"})

Tk.mainloop

# eof
 ----

実は, (tk.rb が使えないからといって ruby をあきらめるのは惜しいので,)
tcl/tk のライブラリを直接 *リンク* して ruby から呼ぶためのライブラリ
をつくりました. これを使うと, 正しく[A] のように描画が終わってからボタ
ンが戻るのが分かります.

(ちなみに, いろいろ理由はあるのですが, 拙作ライブラリのインターフェー
スは ruby/tk とは全く違います. tcl/tk の表現をなるべくそのまま ruby で
実現できるようにしてしまいました. (そうすれば, tcl/tk の man が使える.))

自分で使う分には十分完成したのですが, せっかくなので tcl/tk の勉強を兼
ねて, 一通りの機能が使えるかどうかテストしているところです.

なにせ, tcl/tk も ruby もはじめて...

----
重弘裕二
阪大情報処理教育センター (sigehiro@rd.ecip.osaka-u.ac.jp)
阪大工情報システム白川研 (sigehiro@ise.eng.osaka-u.ac.jp)

In This Thread