>  Option 2: RefObject, ValObject - interfaces
>    VM at class definition adds RefObject to all existing classes
>    value classes required to declare ValObject as superinterface
> 
>    ackwardness: VM needs special behaviors for Object.wait, Object.notify - 
> if dynamically a ValObject, throw IMSE
>      instead of having that obvious from the implementation in a superclass.
> 
> Are there other concerns here?
> This seems cleaner to me - especially since I also believe that 
> synchronization on ValObjects will also require
> special handling - which will be vm implementations rather than visible in 
> java sources (exact plan is TBD).

As I said to Remi, let’s be crystal clear that this seems cleaner _only to VM 
implementors_.  To everyone else, it’s less clean, less powerful, less 
educational, and more complicated (“why can’t I implement both RefObject and 
ValObject?”)  

If we bash our heads against the former for a while and give up, that’s OK; we 
can’t solve all the problems all the time.  But let’s be clear what we’re 
doing, and why.  

Theres’s also a middle ground: ValObject is a class, and RefObject is an 
interface.  While this may appear stupid, it reclaims more than half of what we 
lose by making both interfaces — because it gives us a place to put privileged, 
final, value-specific behaviors.  And values are going to need more of them 
than references will.  




Reply via email to