[#25279] mkmf - DESTDIR is ignored — dellin <dellin_geo@...>

こんxxは。dellinです。

14 messages 2000/10/02

[#25311] =begin, =end — m_seki@...

27 messages 2000/10/04
[#25315] Re: =begin, =end — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/10/05

なひです.

[#25317] Re: =begin, =end — rubikitch <rubikitch@...> 2000/10/05

From: "NAKAMURA, Hiroshi" <nakahiro@sarion.co.jp>

[#25319] Re: =begin, =end — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/10/05

なひです.

[#25321] Re: =begin, =end — rubikitch <rubikitch@...> 2000/10/05

From: "NAKAMURA, Hiroshi" <nakahiro@sarion.co.jp>

[#25341] Re: =begin, =end — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/10/06

なひです.こちらはRDの話.

[#25417] Re: mswin32 組み込み用 Ruby — toyofuku@...

豊福です。遅い反応でごめんなさい。

19 messages 2000/10/10
[#25423] Re: mswin32 組み込み用 Ruby — nobu.nakada@... 2000/10/10

なかだです。

[#25471] Re: mswin32 組み込み用 Ruby — toyofuku@... 2000/10/16

豊福です。

[#25474] 始めまして — matsue <mattue@...>

松江と言います。お初になります。

15 messages 2000/10/16

[#25505] media watch 2000.10.18 — Noritsugu Nakamura <nnakamur@...>

26 messages 2000/10/18
[#25522] Re: media watch 2000.10.18 — Noritsugu Nakamura <nnakamur@...> 2000/10/19

[#25540] Re: media watch 2000.10.18 — Shin-ichiro HARA <sinara@...> 2000/10/20

原です。

[#25567] Ruby で遅い処理は? — Yasuki <yasuki@...>

Yasukiです.

16 messages 2000/10/22

[#25599] 原先生の本 — WATANABE Tetsuya <tetsu@...>

渡辺哲也です。

44 messages 2000/10/25
[#25611] Re: 原先生の本 — Shin-ichiro Hara <sinara@...> 2000/10/26

原です。

[#25733] Re: 原先生の本 — keiju@... (石塚圭樹) 2000/11/01

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

[#25738] Re: 原先生の本 — Shin-ichiro HARA <sinara@...> 2000/11/01

原です。

[#25628] RWiki 1.0 and てんこもりぱっく — Masatoshi SEKI <m_seki@...>

14 messages 2000/10/26

[#25633] ping.rb の使い方 — goto@...

お世話になります。後藤です。

20 messages 2000/10/27

[#25674] EOF before end of embedded document — YANAGAWA Kazuhisa <kjana@...>

>od -c foo

15 messages 2000/10/28
[#25678] Re: EOF before end of embedded document — matz@... (Yukihiro Matsumoto) 2000/10/28

まつもと ゆきひろです

[ruby-list:25510] Re: net/imap.rb

From: Shugo Maeda <shugo@...>
Date: 2000-10-18 17:25:22 UTC
List: ruby-list #25510
前田です。

何かもったいないので勝手にruby-listにふりますm(__)m
# ruby-devの方がよいのかな?

At Wed, 18 Oct 2000 20:20:16 +0900,
akira yamada / やまだあきら <akira@ruby-lang.org> wrote:
> >> IMAP4rev1 では非同期にコマンドを送ることができるそうですが, 
> S> RFC読むとそんな感じがするのですが、複数のリクエストの処理中にタグ
> S> のついてないレスポンスが来た場合に、それがどのリクエストへの応答
> S> なのか判断できなさそうに思えたのでこういう実装にしています。
> S> 何かよいアイデアがあれば教えてください(^_^;
> 
> わたしも RFC と本を読みはじめたばかりなのでアレなんすが, 
> 一方的に送られるくるタグなし応答って EXPUNGE だけでないすかね?
> EXPUNGE 以外はなんらかのコマンドに対する応答として
> 返されるような気がします. 

いや、一方的におくられてくるのは考えてないです。

私の勘違いかもしれませんけど、たとえばFETCHとかSTOREを何個か並行
して実行したとして、タグなしのFETCHレスポンスが来た時にどっちのコ
マンドへの応答なのかわからない気がします。
# FETCHレスポンスの内容まで見てコマンドとの整合性をしらべればわか
# るケースもあるかなとか思ったりしましたけど、オーバーへッドが…
RFC実はちゃんと読みきれてないんですが、こういう場合は最初のレスポ
ンスの応答が完了するまで他のレスポンスはかえさないもんなんでしょ
うか?
# だったら並行にしてもあんまり意味がないような気がしますが。

その問題がクリアできれば、

    def async_fetch(set, attr)
      return Thread.start {
        @mutex.synchonize {
           tag = send_cmd(...)
           until command_completed?(tag)
             @cond.wait(@mutex)
           end
           get_response("FETCH")
        }
      }
    end

みたいに実装して、

resp1 = imap.async_fetch(1..-1, "ENVELOPE")
imap.select("other")
resp2 = imap.async_fetch(1..-1, "ENVELOPE")
....
x = resp1.value # レスポンスの値がほしい時

とかするとかっこいいような気がするんですけど、UW-IMAPDとかの挙動
を見てると、結局、送った順番に一個ずつレスポンスを返してるだけの
ような気がするので、苦労の割に得るものは少ないんじゃないかなとか
思ったりします。

というわけで当面はもっと他のことに労力を費やしたいです。
# たとえばENVELOPEやBODYSTRUCTUREに対応するクラスを用意したりとか。

しかし、imap.rb書いて思ったのですが、IMAPって実装者にやさしくない
プロトコルですね。

* 1 EXISTS

とかを

* MESSAGES 1

にしてくれれば、2番目のトークンでレスポンスの種類がわかるのにー。

> で, ここからちょっと先走ります(^_^;
> 
> 先の質問の意図は, わたしの要望というか
> 利用時のイメージを言った方がわかりやすいと思うんですが, 
> それはこういうことです. 
> 
>  ・完全に手続き的なインタフェースがほしい
> 
>    今だと「コマンド送ってレスポンスを受け取る」を
>    全部やってくれています. これはこれでうれしいのですが, 
>    それとは別に「コマンドを送る」, 「レスポンスを受け取る」
>    というメソッドもほしい気がしています. 
> 
>  ・同期モードと非同期モードを作る
> 
>    ここでいう同期モードというのは, 
>    現在の imap.rb のようなふるまいを期待しています. 
> 
>    一方, 非同期モードの方はこういう感じですかね
> 
>      x = Net::IMAP.new(...)
> 
>      tag = x.select('inbox')
>      # ↑はコマンドをキューにいれるだけ
>      # 別スレッドで(?)キューからとり出して送信している
> 
>      r = x.wait(tag)
>      # ↑は(他のコマンドがあればそれも待つけど)特に
>      # tag で指定されたコマンドへの応答があるまで待つ
>      if r
>        begin
> 	 tags = []
> 	 tags << x.fetch(...) # コマンドをキューにいれるだけ
> 	 tags << x.store(...) # コマンドをキューにいれるだけ
> 	 tags << x.fetch(...) # コマンドをキューにいれるだけ
> 	    …
> 	 x.wait { |tag, response|
> 	   # 応答のあったものからブロックを適用
> 	 }
> 
>        rescue Net::IMAP::UNTAGGED_EXPUNGE
>          # x.finished に完了したコマンドが
>          # x.unfinished に未完のコマンドが
>        end
>      end
> 
>    うまく利用イメージが伝わるかわかりませんが, 
>    なんかこんなようなやり方ができるとうれしいです. 
> 
> 非同期モードにおいてはコマンドに対応するメソッドは
> 内部のキューにいれるだけで実行はせず, 
> 内部的に動いている別スレッドでコマンドの送信を
> 行う形になるのではないかと思っています. 
> 
> ただ, レスポンスを待たなきゃ送れないコマンドもあるようなので
> その点に注意しなくてはならないように思います. 
> うーん, こんなんかなあ. 
> 
>   class Net::IMAP
>     def queueing(command)
> 
>       # RFC2060 section 5.5: Therefore, if the client sends any
>       # command other than FETCH, STORE, or SEARCH, it MUST wait for a
>       # response before sending a command with message sequence
>       # numbers.
>       raise PLEASE_WAIT if must_i_wait_now?
> 
>       @queue.lock
>       @queue.put(command)
>       @queue.unlock
> 
>       return command.tag
>     end
> 
>     def fetch(arg)
>       queueing(Command.new(:FETCH, arg, arg, ...))
>     end
> 
>     def copy(arg)
>       queueing(Command.new(:COPY, arg, arg, ...))
>     end
> 
>     …
> 
>     def wait(tag = nil, &block)
>       @queue.lock # queue をロックして queueing がブロックするようになる
>       if !tag
>         responses = []
>         # @response は完了したコマンドのレスポンスがはき出されて
>         # なんらかの処理がされるのを待つキュー
>         while r = @response.get(nil)
>           if block
>             block.call(r.tag, r)
>           else
>             responses << r
>           end
>         end
>         return responses
>       else
>         if block
>           r = @response.get(tag)
>           block.call(r.tag, r)
>         else
>           return @response.get(tag)
>         end
>       end
>     end
>   end
> 
> 
> 非同期モードは net/imap.rb の範囲を
> 超えてしまっているかもしれませんが
> これがあるとうれしいというか, これを実装したいというか, 
> そんなところです. 
> 
> 
> # ちょっと発散ぎみのメールになっちゃいました, ごめんなさい. 
> 
> -- 
> 
>  やまだ あきら <URL:http://arika.org/>
>  (akira@arika.org, akira@ruby-lang.org or akira@ad-hoc.org)
> 
>  
> 

-- 
前田 修吾

In This Thread

Prev Next