On Wed, Aug 17, 2005 at 08:47:18AM -0700, Larry Wall wrote:
> : >That could be made to work by defining constant to mean you can assign
> : >to it if it's undefined.  But then it gets a little harder to reason
> : >about it if $pi can later become undefined.  I suppose we could
> : >disallow undefine($pi) though.

If you can assign it when it contains an undefined value, bad
things happen:

    sub f ($x is readonly) { $x = 10 }
    my $a; f($a);

Compare this with:

    my $x is readonly;
    $x = 10;

If it is defined as "bound to a immutable value cell", both cases
above would fail, which is imho the easiest to explain.

> You could still reason about it if you can determine what the initial
> value is going to be.  But certainly that's not a guarantee, which
> is one of the reasons we're now calling this write/bind-once behavior
> "readonly" and moving true constants to a separate declarator:
> 
>     my $pi is readonly;
>     $pi = 3;

The question remains, whether you can bind the readonliness away:

    my $pi is readonly; # undef at this point
    my $e is rw = 2.7;
    $pi := $e;
    $pi = 9;

I can argue both sides -- rebindable is easier to implement, but
non-rebindable is perhaps more intuitive.

Thanks,
/Autrijus/

Attachment: pgppQH8aaeZBP.pgp
Description: PGP signature

Reply via email to