[#41581] Ruby 1.6.7 dieing of segfault — Dossy <dossy@...>

I've got something that's fairly reproducible in 1.6.7. Is

11 messages 2002/06/02
[#41582] Re: Ruby 1.6.7 dieing of segfault — Nobuyoshi Nakada <nobu.nokada@...> 2002/06/02

Hi,

[#41660] dynamic attr_accessor?? — Markus Jais <mjais@...>

hello

16 messages 2002/06/03

[#41755] HTML Parser suggestions wanted — Ned Konz <ned@...>

I've written an HTML parser that builds trees from HTML source. After

13 messages 2002/06/04

[#41809] eval and local variable — "Park Heesob" <phasis@...>

15 messages 2002/06/05

[#41819] mod_ruby and module space — "Sean O'Dell" <sean@...>

It seems that if I execute a script using mod_ruby, I cannot call

18 messages 2002/06/05

[#41867] Pascal-like 'with' statement? — Philip Mak <pmak@...>

Is there something like Pascal's with statement? I'd like to turn this

18 messages 2002/06/06

[#41919] 1-second events — Paul Brannan <pbrannan@...>

I need to create an event that occurs exactly once per second.

15 messages 2002/06/06

[#42086] ANN: REXML 2.3.5 && 2.2.3 — Sean Russell <ser@...>

<posted & mailed>

31 messages 2002/06/09
[#42091] Re: ANN: REXML 2.3.5 && 2.2.3 — Sean Russell <ser@...> 2002/06/09

<posted & mailed>

[#42092] RE: ANN: REXML 2.3.5 && 2.2.3 — <james@...> 2002/06/09

> Well, XMLSchema may be troublesome to interpret, but it isn't

[#42192] ruby-dev summary 17252-17356 — Minero Aoki <aamine@...>

Hi all,

81 messages 2002/06/11
[#42290] Re: a new block parameter/variable notation (Re: ruby-dev summary 17252-17356) — Kent Dahl <kentda@...> 2002/06/12

Not wanting to flog a dead horse, but I just wonder what the final word

[#42295] Re: a new block parameter/variable notation (Re: ruby-dev summary 17252-17356) — matz@... (Yukihiro Matsumoto) 2002/06/12

Hi,

[#42455] Application server & web developement enviroment — "Radu M. Obad磚 <whizkid@...>

Howdy,

14 messages 2002/06/14
[#42459] Re: Application server & web developement enviroment — Austin Ziegler <austin@...> 2002/06/14

On Fri, 14 Jun 2002 15:55:31 +0900, Radu M. Obadwrote:

[#42472] ANN: Programmierung in Ruby — "Juergen Katins" <katins.juergen@...>

Programmierung in Ruby Online gibt es jetzt mit ausfrlichem

14 messages 2002/06/14

[#42504] Are Unix tools just slow? — Chris Gehlker <gehlker@...>

Awhile back I was asking for help with a unixy way to search the mounted

48 messages 2002/06/14
[#42516] Re: Are Unix tools just slow? — "Daniel P. Zepeda" <daniel@...> 2002/06/15

On Sat, 15 Jun 2002 07:14:38 +0900

[#42506] Re: Are Unix tools just slow? — Rick Bradley <rick@...> 2002/06/14

* Chris Gehlker (gehlker@fastq.com) [020614 17:18]:

[#42512] Re: Are Unix tools just slow? — Chris Gehlker <gehlker@...> 2002/06/15

On 6/14/02 3:34 PM, "Rick Bradley" <rick@rickbradley.com> wrote:

[#42513] opengl for ruby, please help — ccos <ccos@...> 2002/06/15

unix newby failing miserably here:

[#42507] mpg123 — Tobias Reif <tobiasreif@...>

Hi,

15 messages 2002/06/14

[#42546] File.new('foo', 0600 , 'wb') — Tobias Reif <tobiasreif@...>

Hi,

21 messages 2002/06/15
[#42552] Re: File.new('foo', 0600 , 'wb') — Tobias Reif <tobiasreif@...> 2002/06/15

Dossy wrote:

[#42591] Kernel#select questions — Wilkes Joiner <boognish23@...>

I'm trying to track down a bug where Kernel#select is returning [[],[],[]] as

12 messages 2002/06/17

[#42617] eRuby on Mac OS X — Jim Menard <jimm@...>

I've searched ruby-talk for this topic, and the only messages I found show

13 messages 2002/06/17

[#42674] REXML in C — "Radu M. Obad磚 <whizkid@...>

Hi,

20 messages 2002/06/18

[#42771] Why is I/O slow? — Clifford Heath <cjh_nospam@...>

Ok, folk, time to try again. It's nothing to do with SHA-1.

61 messages 2002/06/20
[#42831] Re: Why is I/O slow? — Clifford Heath <cjh_nospam@...> 2002/06/21

Yukihiro Matsumoto wrote:

[#42836] RE: Why is I/O slow? — "Mike Campbell" <michael_s_campbell@...> 2002/06/21

> With respect, this doesn't sound like a smart idea. The glibc folk have

[#42838] Re: Why is I/O slow? — Albert Wagner <alwagner@...> 2002/06/21

On Thursday 20 June 2002 10:10 pm, Mike Campbell wrote:

[#42839] Re: Why is I/O slow? — Austin Ziegler <austin@...> 2002/06/21

On Fri, 21 Jun 2002 12:16:24 +0900, Albert Wagner wrote:

[#42928] GOOD DEAL — "DR. ISA BELLO" <dr_isa@...>

FROM:DR ISA BELLO

11 messages 2002/06/22

[#42982] No exceptions from String#to_i — "Hal E. Fulton" <hal9000@...>

I've been bitten by this before... maybe

19 messages 2002/06/24
[#42983] Re: No exceptions from String#to_i — ts <decoux@...> 2002/06/24

>>>>> "H" == Hal E Fulton <hal9000@hypermetrics.com> writes:

[#42986] Re: No exceptions from String#to_i — Nikodemus Siivola <tsiivola@...> 2002/06/24

[#43122] Re: help (ruby-talk ML) — Benjamin Peterson <bjsp123@...>

20 messages 2002/06/27
[#43123] Re: help (ruby-talk ML) — Dave Thomas <Dave@...> 2002/06/27

Benjamin Peterson <bjsp123@yahoo.com> writes:

[#43124] RE: help (ruby-talk ML) — Bob Calco <robert.calco@...> 2002/06/27

Yes, I would gladly volunteer considerable effort to this end. I have

[#43147] Ruby on Mac OS X — Tobias Reif <tobiasreif@...>

Hi,

24 messages 2002/06/28

[#43174] eruby SAFE question — Dylan Northrup <docx@...>

I'm trying to implement a replacement for the standard apache file listings

39 messages 2002/06/28
[#43249] documentation licenses (was: eruby SAFE question) — Tobias Reif <tobiasreif@...> 2002/06/30

Dave Thomas wrote:

[#43250] Re: documentation licenses (was: eruby SAFE question) — Dave Thomas <Dave@...> 2002/06/30

Tobias Reif <tobiasreif@pinkjuice.com> writes:

[#43255] RE: documentation licenses (was: eruby SAFE question) — <james@...> 2002/06/30

>

[#43280] Re: documentation licenses (was: eruby SAFE question) — "Juergen Katins" <juergen.katins@...> 2002/07/01

Tobias Reif wrote

[#43282] Re: documentation licenses (was: eruby SAFE question) — David Alan Black <dblack@...> 2002/07/01

On Mon, 1 Jul 2002, Juergen Katins wrote:

[#43381] RE: documentation licenses (was: eruby SAFE question) — <james@...> 2002/07/02

> From: David Alan Black [mailto:dblack@candle.superlink.net]

Re: ruby-dev summary 17252-17356

From: adamon@... (Damon)
Date: 2002-06-12 23:23:22 UTC
List: ruby-talk #42367
"James F.Hranicky" <jfh@cise.ufl.edu> wrote 
> "Damon" <adamon@mailandnews.com> wrote:
> 
> > That is: Modifications to a block variable are visible outside of the
> > block only if explicitly specified using a 'with' clause.
> > 
> > To put it another way, variables are passed into the block "by value".
> > Only if specified using a 'with' clause are they passed in "by
> > reference".
> > If a variable is passed in "by value" then any changes made to that
> > variable are restricted to the block; thus we get shadowing for free.
> 
> Hey, I like it.
> 
> The brace version isn't quite as pretty, but it's still fine with me:
> 
>     (1..10).each { with{i} |i|
>  	a = i*i
>     }
> 
I'd actually meant for the 'with' clause to appear outside of the
block.  Perhaps that might make the brace version a little prettier?

a = 1
i = 2

(1..10).each with{i} { |i|
    a = i*i
}

p a  # -> 1
p i  # -> 10


> How about we extend it to block variables as well:
> 
>     (1..10).each { with{i,a,b} |i|
>  	a = i*i
> 	b = 10
>     }
> 
> "i" and "a" now reference outer variables, b is local.

I had also intended for block variables not specified in the 'with'
clause to always be local.  Thus in the above example, 'b' would not
be local to the block:

a = 1
i = 2
b = 3    # b defined outside of the block prior to executing the block

(1..10).each with{i,a,b} { |i|
    a = i*i
    b = 10
}

p a  # -> 100
p i  # -> 10
p b  # -> 10


a = 1
i = 2
        # b not defined outside of the block

(1..10).each with{i,a,b} { |i|
    a = i*i
    b = 10
}

# This should raise an error, because b is expected to be defined when
# the 'with' clause is run.


To make 'b' local to the block, simply leave it out of the 'with'
clause.
Thus:

a = 1
i = 2
b = 3    # b defined outside of the block prior to executing the block

(1..10).each with{i,a} { |i|
    a = i*i
    b = 10
}

p a  # -> 100
p i  # -> 10
p b  # -> 3

or:

a = 1
i = 2
        # b not defined outside of the block

(1..10).each with{i,a} { |i|
    a = i*i
    b = 10     # b defined only inside block, making it block local
}

p a  # -> 100
p i  # -> 10
p b  # error: undefined variable 'b'


> 
> Of course, we could always use a clause to force locality instead:
> 
>     (1..10).each { local{b} |i|
>  	a = i*i
> 	b = 10
>     }
> 
> I do like the idea of having block params and variables be localized/de-
> localized in the same fashion.
> 

Unfortunately, this looks a little too much like a variable
declaration for my taste.  The default behavior is to have all
variables in a block local to the block, unless specified with a
'with' clause.  The 'with' clause can be likened to an "accessor" for
variables that are private to the block.  If the variable is not
specified in the 'with' clause then it should remain private to the
block, or local to the block.

By adopting this rule, we can do away with variable declarations
altogether, using lexical scoping rules to determine a variable's
visiblity and 'with' clauses to determine if changes made to a
variable inside a block are propagated outside of the block.

To summarize:

1)  Variables in the outer body are "passed by reference" if specified
    in a 'with' clause, passed "by value" otherwise.  Thus changes to
    the variable are propagated back to the outer body if the variable
    is specified in the 'with' clause.


2)  A variable is local to the block, if it is defined in the block
    and does not appear in the 'with' clause of the block.

3)  Changes to a variable defined in the outer body are local to the
    block if the variable does not appear in the 'with' clause of the
    block.

I suppose one can invert the functionality and have instead a
'without'
clause, which would mean the same thing as a 'local' clause.  Ie, now
we have variables passed in by reference, unless they are specified in
the 'without' clause, in which case they would be passed in by value.

a = 1
i = 2

(1..10).each without{i} { |i|
    a = i*i
}

p a  # -> 100
p i  # -> 2

a = 1
i = 2

or equivalently,

a = 1
i = 2

(1..10).each local{i} { |i|
    a = i*i
}

p a  # -> 100
p i  # -> 2

So in the absence of a 'without' or 'local' clause, we get pass by
reference

a = 1
i = 2

(1..10).each { |i|
    a = i*i
}

p a  # -> 100
p i  # -> 10

which conforms to current behavior.

However, I think it's better to use 'with' clauses rather than
'without' clauses, as it is safer to default to pass-by-value rather
than pass-by-reference.

Damon

In This Thread