Records -- current status

Brian Goetz brian.goetz at oracle.com
Thu Mar 29 21:15:06 UTC 2018


The idea of factoring out the defaults somewhere close by isn't 
intrinsically objectionable (though the suggestion to factor them all 
the way into the module descriptor is horrible), but it makes me unhappy 
for a different reason -- it creates the impression that there are two 
kinds of records, mutable and regular, with separate semantics.  That 
creates a proliferation of new concepts in the users mind, and worse, in 
ours -- which makes it more likely the semantics of mutable vs plain 
records will diverge eventually.  A modifier on the field, on the other 
hand, is something the user already understands, especially when it is 
something as self-explanatory as `mutable` or `nonfinal` or `non-final`.

I would like it to be clear that there is one kind of record. (Ideally 
it deals well enough with both final and nonfinal fields, perhaps 
favoring one over the other.)

On the topic of how to spell "non-final", let's keep these in mind:
  - There *will* be other negation keywords coming.  So a regularized 
way to express it makes future decisions easier and reduces the 
perceived cost of new keywords that are just the negation of old keywords.
  - It may be tempting to spell it "mutable", but that only describes 
one meaning of final, and wouldn't do well for the others (final classes 
and final methods.)

(FWIW, non-final is considerably *easier* for the parser to handle than 
"nonfinal" -- because "-" is already a token and "final" is already a 
keyword.  Depending on where in the grammar a new contextual keyword is 
allowed, one may have to jump through unpleasant hoops.  But non-final 
poses relatively little problem, at least for our compiler.  This is a 
strong point in favor of the non-keyword scheme.)


On 3/29/2018 4:59 PM, Kevin Bourrillion wrote:
> I somewhat like (gut-level) the idea of a single modifier on the 
> record itself that reverses the default for all the fields at once... 
> it emphasizes that the entire thing is becoming a mutable record, even 
> if you put final back onto some of the fields.



More information about the amber-spec-experts mailing list