[#1263] Draft of the updated Ruby FAQ — Dave Thomas <Dave@...>

33 messages 2000/02/08

[#1376] Re: Scripting versus programming — Andrew Hunt <andy@...>

Conrad writes:

13 messages 2000/02/15

[#1508] Ruby/GTK and the mainloop — Ian Main <imain@...>

17 messages 2000/02/19
[#1544] Re: Ruby/GTK and the mainloop — Yasushi Shoji <yashi@...> 2000/02/23

Hello Ian,

[#1550] Re: Ruby/GTK and the mainloop — Ian Main <imain@...> 2000/02/23

On Wed, Feb 23, 2000 at 02:56:10AM -0500, Yasushi Shoji wrote:

[#1516] Ruby: PLEASE use comp.lang.misc for all Ruby programming/technical questions/discussions!!!! — "Conrad Schneiker" <schneiker@...>

((FYI: This was sent to the Ruby mail list.))

10 messages 2000/02/19

[#1569] Re: Ruby: constructors, new and initialise — Yukihiro Matsumoto <matz@...>

The following message is a courtesy copy of an article

12 messages 2000/02/25

[ruby-talk:01330] Re: Bug in Kernel.open (I think)

From: matz@... (Yukihiro Matsumoto)
Date: 2000-02-13 16:44:21 UTC
List: ruby-talk #1330
In message "[ruby-talk:01318] Bug in Kernel.open (I think)"
    on 00/02/12, Dave Thomas <Dave@thomases.com> writes:

|You recently changed Kernel.open so it would take a block in the pipe
|form. Unfortunately, I think now it _has_ to take a block:

You are right, and your fix should be OK.

But I've not decided yet about the behavior.  I cannot explain good,
but I'll try anyway.

usual (non-pipe) `open' uses block to ensure closing.

  open(path) {|f| ..work on f..}

`open' with pipe to self, i.e. `open("|-")', without block, returns IO
for parent process, and nil for child process.

And the new behavior for `open("|-")' with block is to give opened
port to block (nil for child process).  Thus you should write

   open("|-") {|f| 
     if f == nil then ..child process ..
     else ..parent process.. end
   }

The problems are:

  * backward incompatibility

    Old behavior executes block only on parent process, it did not
    require nil check in block.  The new bahavior broke some scripts.
    I received a trouble report about this behavior change.

  * unavoidable conditional

    By new behavior, nil check in the block is must.  It's not as easy
    as it should be, I think.  For example, `fork' uses block to
    execute under child process.

      fork { p "in child" }

    No conditinal needed, easy to write&read.  Oh, I wish I can say

      open("|-"){..child..}{..parent..}

    Or, maybe

     open("|-", proc{..child..}){parent}

    The latter is syntactically possible.

What do you think about this?
							matz.

In This Thread