----- Mail original -----
> De: "Brian Goetz" <brian.go...@oracle.com>
> À: "Remi Forax" <fo...@univ-mlv.fr>, "valhalla-spec-experts" 
> <valhalla-spec-experts@openjdk.java.net>
> Envoyé: Dimanche 9 Mai 2021 17:04:31
> Objet: Re: Make new Object() backward compatible

>> The logical conclusion is that java.lang.Object is a parametric class with a
>> parameter saying if it should implement IdentityObject or not.
> 
> Magic hammer, meet nail :)

New tool, new tricks :)

Given that we want two classes for java.lang.Object, seeing them as one being a 
specialization of the other is not too outrageous.

> 
> To be explicit, what you're suggesting is something like
> 
>     class Object<ID : boolean> { ... }
> 
> where an identity class extends Object<true> and a primitive class
> extends Object<false> (and most interfaces remain parametric in ID.)

yes

> 
> Its conceptually elegant, and we've discussed it before; in theory
> parametricity could range over things other than types, such as
> constants, identity-ness, etc (e.g., the ref and val projections could
> be species).  But to apply it to a problem as prosaic as this seems like
> cracking a walnut with a two-ton bomb.  (I don't thing this is what you
> want to teach on day 1.)

It seems that you are thinking that i want to introduce a special syntax just 
for specializing java.lang.Object, I don't.

I'm not proposing to change to the source code of Object.java, only the 
bytecode.
The compiler will insert the SpecializationAnchor (and the attribute that adds 
the identity-ness) without needing any language support.

The VM can also dynamically insert the SpecializationAnchor, but modifying 
javac to get the bytecode we want seems an easier path.

Rémi

Reply via email to