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?)



Reply via email to