The interfaces IdentityObject and ValueObject must die !

forax at univ-mlv.fr forax at univ-mlv.fr
Thu Jan 27 07:24:54 UTC 2022


> From: "John Rose" <john.r.rose at oracle.com>
> To: "daniel smith" <daniel.smith at oracle.com>
> Cc: "Remi Forax" <forax at univ-mlv.fr>, "valhalla-spec-experts"
> <valhalla-spec-experts at openjdk.java.net>
> Sent: Thursday, January 27, 2022 2:18:03 AM
> Subject: Re: The interfaces IdentityObject and ValueObject must die !

> On 26 Jan 2022, at 16:36, Dan Smith wrote:

>> An instance of a class is also an instance of (and carries the properties of)
>> its superclasses. Value objects are instances of the class Object.

>> I can imagine a design in which we say that instances of Object may be either
>> identity or value objects, but direct instances of the class are always
>> identity objects. But this is not how we've handled the property anywhere else,
>> and it breaks some invariants. We've gotten where we are because it seemed less
>> disruptive to introduce a subclass of Object that can behave like a normal
>> identity class.
> And yet there is also a second way a class can be an instance; it can be exactly
> an instance of C , when x.getClass()==C.class . That’s the condition which can
> be teased apart here, if we allow ourselves to use something other than marker
> interfaces. But marker interfaces (as I said) are committed to ignoring the
> “exactly an instance” condition, because they inherit.

YES ! 
being a value class (primitive class) is a runtime property, not something attached to a type and this is a separate concern from the flattenability which is either type hint (Q-type, L-type + Preload) or a type hint + a runtime check in case of arrays. 

Rémi 


More information about the valhalla-spec-observers mailing list