[#27919] 1.8.4 Preview2 検証 — "URABE Shyouhei aka. mput" <root@...>

卜部です。

33 messages 2005/12/01

[#27997] 1.8.4 documents? — "URABE Shyouhei aka. mput" <root@...>

卜部です。

22 messages 2005/12/12
[#28017] Re: 1.8.4 documents? — Koji Arai <jca02266@...> 2005/12/13

新井です。

[#28082] ruby_1_8 Segmentation fault on Cygwin — yanagi@...

柳田です。

13 messages 2005/12/21
[#28083] Re: ruby_1_8 Segmentation fault on Cygwin — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/21

山本です。

[#28140] ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org>

HP-UX で HP aC++/ANSI C を使って作った ruby で、openssl や drb のテストをすると、

34 messages 2005/12/27
[#28141] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — WATANABE Tetsuya <Tetsuya.WATANABE@...> 2005/12/28

渡辺哲也です。

[#28142] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org> 2005/12/28

In article <200512280307.jBS37nnj005909@pbsg500.nifty.com>,

[#28147] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/28

山本です。

[#28149] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — Tanaka Akira <akr@...17n.org> 2005/12/28

In article <20051228210640.13C71A10.ocean@m2.ccsnet.ne.jp>,

[#28151] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError) — WATANABE Tetsuya <Tetsuya.WATANABE@...> 2005/12/29

渡辺哲也です。

[#28152] Re: ia64-hpux11.23/socket.sl: this executable file can't load extensionlibraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/29

山本です。

[#28153] Re: ia64-hpux11.23/socket.sl: this executable file can't load extensionlibraries (LoadError) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2005/12/29

山本です。

[#28154] thread based generator.rb — Tanaka Akira <akr@...17n.org> 2005/12/29

In article <20051229114438.44D19F00.ocean@m2.ccsnet.ne.jp>,

[ruby-dev:28147] Re: ia64-hpux11.23/socket.sl: this executable file can't load extension libraries (LoadError)

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2005-12-28 12:06:51 UTC
List: ruby-dev #28147
山本です。

>もし予測が正しければそれは callcc が癌なので、generator.rb
>を callcc じゃなくて thread で実装するのがいいのではないかと
>思っています。

同感です。(callcc は危険だと思う --;;)

Thread.critical じゃなくて Mutex を使うべきだとか、
色々ありそうですが、とりあえずこんな感じで動きました。

一応 [ruby-dev:25674] にも対応したつもりです。

Thread.abort_on_exception = true

class Generator
  include Enumerable

  def initialize(enum = nil, &block)
    if enum
      @block = proc{|g| enum.each{|value| g.yield value}}
    else
      @block = block
    end
    @index = 0
    @queue = []
    @loop_thread = Thread.new do
      Thread.stop
      Thread.critical = true
      begin
        @block.call(self) # exception safe?
      ensure
        @main_thread.wakeup
        Thread.critical = false
      end
    end
  end

  def yield(value)
    if Thread.current != @loop_thread
      raise RuntimeError.new("Generator#yield must be called in Generator.new(){|g| ... }")
    end
    @queue << value
    @main_thread.wakeup
    Thread.stop
    Thread.critical = true
  end

  def end?
    if @queue.empty?
      Thread.critical = true
      @main_thread = Thread.current
      begin
        @loop_thread.wakeup
        Thread.stop
      rescue ThreadError
        # ignore
      ensure
        @main_thread = nil
        Thread.critical = false
      end
    end
    @queue.empty?
  end

  def current
    raise EOFError.new("no more elements available") if end?
    @queue.first
  end

  def next
    raise EOFError.new("no more elements available") if end?
    @index += 1
    @queue.shift
  end

  def next?
    !end?
  end

  def index
    @index
  end

  def pos
    @index
  end

  def rewind
    initialize(nil, &@block) if @index.nonzero?
    self
  end

  def each
    rewind
    until end?
      yield self.next
    end
    self
  end

end


In This Thread