Javari's Reference Immutability
Regan Heath
regan at netwin.co.nz
Tue Jul 25 17:42:37 PDT 2006
Of course, because the string is immutable if you modify it, you actually
modify a duplicate string. Are they reference counted then? or does it dup
on every single modification? If so, this would be a very inefficient
implementation of COW.
Regan
On Wed, 26 Jul 2006 12:40:54 +1200, Regan Heath <regan at netwin.co.nz> wrote:
> But java has immutable strings, right?
> http://www.janeg.ca/scjp/pkglang/immutable.html
>
> That in itself is a form of 'const' covering the most common use cases.
>
> Regan
>
> On Tue, 25 Jul 2006 18:21:58 -0600, Hasan Aljudy
> <hasan.aljudy at gmail.com> wrote:
>> I think the question is: what's the point?
>> Clearly, Java's lack of const didn't prevent it from the having some of
>> the best libraries there are.
>>
>> Reiner Pope wrote:
>>> I've read the paper on Javari's reference immutability (thanks to
>>> Bruno) and it has an interesting idea: a synthesis of dynamic and
>>> static checking. This makes it easier to interface const-aware code
>>> with const-unaware code. It can be demonstrated as follows:
>>> Date a = new Date(); // a mutable date
>>> readonly Date b = a; // A readonly view of a
>>> Date c = (mutable) b; // The compiler bypass static checking, but
>>> inserts dynamic checks.
>>> a.modify(); // OK
>>> b.modify(); // Compile-time error
>>> c.modify(); // Runtime error
>>> How could you implement the runtime checking? A first thought would
>>> be to add the following assert to the in contract of every mutating
>>> method:
>>> assert(!isConst);
>>> But that requires that the /class/ knows the const-ness of the
>>> reference it is accessed through, which I don't think it does.
>>> The other alternative seems to be a much easier one: simply modify
>>> the vtbl so that all mutating functions point to a single line:
>>> assert(false, "Trying to modify a class through a readonly view");
>>> The problem with that is that I suspect the vtable is stored with the
>>> class, not the reference, so modifying the vtable will modify it for
>>> all other references, even if they aren't readonly.
>>> Clearly, Javari manages such checking, and it claims to manage it in
>>> a Java-compatible (backwards-compatible) way. How is it done in
>>> Javari, and how could it be done in D?
>>> Cheers,
>>> Reiner
>
More information about the Digitalmars-d-learn
mailing list