It's not safe until it's in the coffer

forax at univ-mlv.fr forax at univ-mlv.fr
Thu May 9 12:35:16 UTC 2019


----- Mail original -----
> De: "Maurizio Cimadamore" <maurizio.cimadamore at oracle.com>
> À: "Remi Forax" <forax at univ-mlv.fr>, "valhalla-spec-experts" <valhalla-spec-experts at openjdk.java.net>
> Envoyé: Jeudi 9 Mai 2019 12:00:12
> Objet: Re: It's not safe until it's in the coffer

> Another oddity, that I find hard to explain away:
> 
> Coffer<String> ~= String
> 
> This seems to be a bad property, as you have two types to name the same
> thing.
> 
> You could, in principle, say that the type parameter of Coffer is
> restricted to... values.

yes, the type argument of a Coffer is restricted to an inline class, i've forgotten to mention that, thanks.

> 
> But here's the second, pedagogical oddity: Coffer<Value> looks an awful
> lot like a specialized generic type. I think people will be surprised in
> seeing that this magic types works, while the types they want
> (List<Value>) does not.

Yes, it's surprising but it has nothing to do with Coffer or V? but with the fact that a T can be nullable and an inline class is not.
Note that the error message saying that List<Value> doesn't work, can suggest that List<Coffer<Value>> may work (at least for LW10).

Now, yes, it looks like a specialized generic type and i think it's fine given we want to introduce specialized generics types in LW3000. 

> 
> Besides...
> 
> List<Coffer<Value>>
> 
> is reeeallly verbose, do we really want to read code like that?

yes, it's verbose by design.

> 
> At the language level, the number of exceptions this will require all
> over the place, from generic well-formedness to inference (imagine
> passing a 'Value' where a Coffer<Z>) is expected, that, while I can
> sympathize with your opening position of '?' being confusing, it seems
> the proposed cure is worse than the disease :-)

I don't think so, here you are supposing, i believe, that the inference has to be changed because inferring Z as an indirect object is not useful.
But we don't have to change the inference, the same way when you have a T... you don't have a special inference rule because creating an array of parameterized type is unsafe,
the idea is to do the same inference algorithm and at the end, you emit an error if Z is not an inline class.

So yes you have some rules around creating a Coffer but they are far less invasive than adding a new union type V? in the type system.

> 
> Maurizio

Rémi

> 
> 
> On 08/05/2019 23:12, Remi Forax wrote:
> > There are two oddities:


More information about the valhalla-spec-experts mailing list