Compatibility goals
Brian Goetz
brian.goetz at oracle.com
Tue May 31 18:37:11 UTC 2016
The Model 3 document posits several migration compatibility goals. I'd
like to drill into these and get consensus on them, as they influence
many other decisions (such as the requirements around raw types.)
Here's what the doc said:
Compatibility
Classes will evolve; some evolutions are compatible, and some are not.
The following enumerates the compatibility consequences of the proposed
approach.
* Alpha-renaming a type variable (to a non-shadowed name) should be
binary and source compatible.
* Reordering or removing type variables is not compatible. (These
first two together match the story for method argument lists; you
can rename method arguments, but not reorder or remove them.)
* Anyfying an existing erased type variable should be binary and
source compatible.
* Adding a new type variable/at the end/of the argument list should be
binary compatible (though not source compatible.) Adding a new type
variable other than at the end is not compatible.
* Generifying an enclosing scope
(evolving|Outer.Inner<U>|to|Outer<T>.Inner<U>|) should be binary
compatible.
* Changing type variable bounds is not binary compatible.
Does anyone have any concerns with these compatibility goals (in either
direction -- that they are too constraining, or not constraining enough?)
More information about the valhalla-spec-observers
mailing list