Updated Draft specs for JEP 359 (Records)

Gavin Bierman gavin.bierman at oracle.com
Fri Nov 15 16:20:55 UTC 2019


Thanks Maurizio

> On 31 Oct 2019, at 14:29, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
> 
> Related to the earlier discussion on forbidden record members - how is this section still relevant?
> 
> "It is a compile-time error for a record declaration to declare a record component with the name clone, finalize, getClass, hashCode, notify, notifyAll, readObjectNoData, readResolve, serialPersistentFields, serialVersionUID, toString, wait, or writeReplace."
> 
> Chris says that the serialization spec ignores all the serialization-related methods if they appear inside a record; should we lift the restrictions?

Yes, we’re going to update this part of the spec. I will write separately about this.

> 
> In the grammar for records, I find it odd that we basically say that record members are class members plus compact constructor, but then we revert to say that instance initializer are not allowed.
> I wonder if a more specific production for the record body would be useful and more direct here?

I think this is a style thing, but I’m keen to reuse the class grammar. 

> 
> I note an asymmetry between the rules for canonical constructor and compact constructor; in one we say:
> 
> "Every field corresponding to a record component of R must be definitely assigned and moreover not definitely unassigned (16.9) at the end of the body of the canonical constructor."
> 
> In the other we say:
> 
> "It is a compile-time error if at the end of the body of the compact constructor, any of the fields corresponding to the record components of R are neither definitely assigned nor definitely unassigned.”

Indeed. Although I can remove both as we get this by virtue of the fields being blank final instance variables (JLS 8.3.1.2). 

> 
> Moreover, a deeper question: should we leave the magic auto-initialization of fields only for the compact form? That way, you would have a _new_ linguistic form, with _new_ properties, whereas old forms (e.g. a constructor with parameters) will have same rules as before (can have returns, must initialize fields explicitly). I think that, from a pedagogical aspect, that would be preferrable.

That’s what we do.

Thanks,
Gavin



More information about the amber-dev mailing list