You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue was labelled with: A-typesystem, B-clarifying, B-RFC, E-mentor, P-high in the Rust repository
UPDATE
Variance inference is complete.
What is still missing is:
applying results of variance inference to type parameters -- this is an expressiveness issue
applying results of variance inference to trait matching (#5781) -- this is a soundness issue
ORIGINAL
Today, we treat all type parameters as invariant, but infer variance for region parameters. We can use that same code which infers the variance for region parameters to infer the suitable variance for type parameters if we like.
Alternatively, if we decide that inference here is too magical, we could require explicit declaration of variance. In that case, i'd favor covariance as the default, and the possibility to write struct Foo<mut T> to indicate an invariant type parameter T (which can appear in mutable locations). This seems more intuitive than the usual + and -. We probably don't need a notation for contravariance, but in that case perhaps fn T (to indicate a type parameter that appears only in function arguments, far and away the most common place to have a contravariant type parameter).
Still, I think I favor inference. It's inline with what we do for regions and I think it will basically match up with user expectations.
The text was updated successfully, but these errors were encountered:
Issue by nikomatsakis
Wednesday Sep 26, 2012 at 18:51 GMT
For earlier discussion, see rust-lang/rust#3598
This issue was labelled with: A-typesystem, B-clarifying, B-RFC, E-mentor, P-high in the Rust repository
UPDATE
Variance inference is complete.
What is still missing is:
ORIGINAL
Today, we treat all type parameters as invariant, but infer variance for region parameters. We can use that same code which infers the variance for region parameters to infer the suitable variance for type parameters if we like.
Alternatively, if we decide that inference here is too magical, we could require explicit declaration of variance. In that case, i'd favor covariance as the default, and the possibility to write
struct Foo<mut T>
to indicate an invariant type parameterT
(which can appear in mutable locations). This seems more intuitive than the usual+
and-
. We probably don't need a notation for contravariance, but in that case perhapsfn T
(to indicate a type parameter that appears only in function arguments, far and away the most common place to have a contravariant type parameter).Still, I think I favor inference. It's inline with what we do for regions and I think it will basically match up with user expectations.
The text was updated successfully, but these errors were encountered: