On Tue, Jul 02, 2002 at 10:36:45AM -0700, Erik Steven Harrison wrote:
>  
> Fortunately, a little research, has clarified a good bit of my question for me. So I 
>think I can reposit it more clearly. Here goes.
> 
> You all know what pass by reference is, right? And pass by value? Well, Algol 60 
>(somewhat by accident, it seems) created a third passing semantic, which is just 
>plain bizzare. A Perlish example, then an explanation.
> 
> my $a = 'foo';
> 
> pass_by_name ( sub { print $a} );
> 
> sub pass_by_name {
>     my $a = 'bar';
>     &@_[0];
> }
> 
> Now, I have trouble keeping Perl 6 and 5 straight, but what I think this does is 
>print 'foo', as the sub ref is a closure, and gets $a bound to it. Fair enough.
> 
> But in pass by name, expressions passed to a function aren't evaluated until they 
>are used inside that function, and are evaluated in the context of the surrounding 
>function. In a pass by name environment, the above code would print 'bar' as the sub 
>isn't evaluated until it is used in pass_by_name, and then it gets pass_by_name's 
>value of $a. Understand? Isn't that weird?
> 
> So, pass by name sort of went to the wayside in the history of language design 
>(Algol 60 passed chunks of the parse tree around to make all this possible). There 
>are benefits (Jensen's Machine is apparantly an example, but don't ask me what it is) 
>but no one has used it since Algol 68 because it's difficult to explain, and hard to 
>implement.
> 
> Now that you understand the background, here is the impetus for my
> question: Ruby has brought pass by name back into the mainstream with it's much 
>lauded iterators. A Ruby iterator is a block of code that objects can take and are 
>evaluated as you would expect in a pass by name environment. I haven't used Ruby, but 
>I am jealous of their iterators. So, my question is, now that we have seen that pass 
>by name has a practical use, and can be handled in a manner which doesn't confuse the 
>user, can we steal it, using Ruby as prior art?
> Basically, do we get Ruby iterators?
> 
> -Erik

I'm new to talking on this list, so please bear with me...

What I see in this example is the same syntax as a closure, so how 
precisely does the interpreter determind whether you want this to be a 
closer or a pass-by-name call. Do you have an example of the perl-ish 
code that doesen't break the ideas of lexical scoping? (or am I just not 
seeing the subtle difference between your example and a closure?)

-hachi

Reply via email to