Compatibility goals

Brian Goetz brian.goetz at
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:


Classes will evolve; some evolutions are compatible, and some are not. 
The following enumerates the compatibility consequences of the proposed 

  * 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
  * 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