Javari's Reference Immutability

Hasan Aljudy hasan.aljudy at gmail.com
Tue Jul 25 17:21:58 PDT 2006


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