A peek at the roadmap for pattern matching and more

Brian Goetz brian.goetz at oracle.com
Fri Aug 14 20:18:12 UTC 2020


>
> Inside Google we have enabled the `-parameters` attribute by default 
> and have an Error Prone check that simulates named parameters 
> (https://errorprone.info/bugpattern/ParameterName).
>
> Initially we had it enabled as a compilation error.  We believed that 
> renames of parameters happened infrequently and rarely crossed 
> compilation boundaries.  We found that those renames were more 
> frequent than expected, and there were a number of accidental breaking 
> changes to core libraries like Guava that caused breakage at a 
> distance.  We ended up demoting the check to a warning.  The general 
> feeling was that this was mostly a problem for core libraries and not 
> typical application code.  One proposal was to leave it as an error by 
> default, but to allow core libraries to opt out of publishing their 
> parameter names.
>
> All that said, I don't think this is a problem for records since the 
> names there are clearly part of the API.

Thanks for enhancing the theoretical discussion with actual data!

The part of this that really interests me is the "boundary-crossing" 
one.  Within a maintenance boundary (package, module, multi-module 
project, monorepo, depending on your tooling) you are free to rename at 
will, using suitable refactoring tools, since you can find all the 
clients and fix them.  It only becomes a real problem when references 
cross boundaries.

I'm curious what's behind your intuition about why records would be 
immune (not that I disagree.)  Is it that they are right there in the 
header?  That they are so restricted that users can't lose sight of the 
fact that they are special?




More information about the amber-spec-experts mailing list