> Paul wrote:
> > --- Austin Hastings <[EMAIL PROTECTED]> wrote:
> > 
> >>Dave Whipp wrote:
> >>
> >>>Joe Gottman wrote:
> > 
> > 
> > Getting deep -- sorry. :)
> > 
> > 
> >>>>Alternatively, there might be a new parameter type that indicates
> >>>>that the parameter is not evaluated immediately:
> >>>>
> >>>>sub infix:!! ($lsh, $rhs is deferred) {...}
> > 
> > 
> > If the standard is pass-by-ref it wouldn't trip any side effects unless
> > you did so in your code, right? So is this necessary?
> > 
> 
> There are two reasonable semantics for deferred parameters:
> 
> 1) lazy evaluation with caching, where the evaluation of the
> actual expression in the call is deferred until the sub
> actauly makes use of it and the result is then cached and
> reused as necessary.  Any side effects happen only once.
> 
> 2) ALGOL style pass by name, where the actual expression from the
> call is turned into a clouser called a thunk which is called
> when ever the sub access the parameter.  Note that the thunk
> may need to be an lvalue clouser to handle is rw paramenters.
> Side effects happen each time the thunk is called.  Also changes
> to the thunks environment can effect its value when called.

I think (2) would be best.  Because of:

    while $a < $b { ... }

That wouldn't be possible with just evaluating it once.  I like the
interface better, too (for the writer of C<while>), but that's just
me.

Luke

Reply via email to