develooper Front page | perl.perl6.language | Postings from June 2006

Re: lvalue functions and lvalue parameters

Thread Previous | Thread Next
Jonathan Scott Duff
June 20, 2006 12:49
Re: lvalue functions and lvalue parameters
Message ID:

I don't have any real answers, but I'll weigh in with my opinion
anyway :-)

On Tue, Jun 20, 2006 at 10:59:01AM +0100, Daniel Hulme wrote:
> I've just thought of an interesting interaction with lvalue functions
> and call by foo. What if I want to write, say, an lvalue ?? !! function
> thus
> sub cond(Bool $c, $a, $b) is rw {
>   if $c return $a else return $b;
> }
> Will this fail because $a and $b are not rw? If so, will it fail at run-
> or compile-time? What about this:

That looks like it should be a compile-time failure to me.

> sub cond(Bool $c, $a is copy, $b is copy) is rw {
>   if $c return $a else return $b;
> }
> Is it allowed, and if so is the behaviour to return a writeable copy of
> $a or $b? I imagine that in any case

I'd expect a compile-time failure here too, or at the very least a
warning.  Besides, returning a local copy each time hardly seems
useful, except perhaps as a way to leak memory.

> sub cond(Bool $c, $a is rw, $b is rw) is rw {
>   if $c return $a else return $b;
> }
> will do what I want. 

That is what I would expect too.

> my Int $a is constant = 0;
> my Int $b is constant = 0;
> (cond(True, $a,$b))++;

We have a "constant" declarator now, so that would be 

constant Int $a = 0;
constant Int $b = 0;
(cond(True, $a,$b))++;

and that should fail at compile time because the compiler knows that
$a and $b are constant and can't be rw.

Jonathan Scott Duff

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About