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.

Either of those can have threading added as well.

--
Mark Biggar
[EMAIL PROTECTED]
[EMAIL PROTECTED]




Reply via email to