--- 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]