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