私はHustley-Milnerを使ってRustの型推論がとても良いと読んでいます。 Rustにも可変変数があり、AFAIKは、HMアルゴリズムが過大化する可能性があるため、可変性で動作する場合にはいくつかの制約が必要です。以下のコード:第2の行の整数で推定された浮動小数点値を整数変数に割り当てることができないのでRustはHindley-Milnerの変異をどのように解決しますか?
let mut a;
a = 3;
a = 2.5;
は、コンパイルされません。だから私は、単純な変数の場合、非ジェネリック型が推論されるとすぐに、変数がモノ型になり、もはや一般化できないと推測しています。
しかし、Vecのようなテンプレートはどうですか?たとえば、次のコードのようになります。
let mut v;
v = Vec::new();
v.push(3);
v.push(2.3);
これはもう一度失敗しますが、もう一度最後の行です。これは、第2行がタイプを部分的に推測し(Vec)、第3行がコンテナタイプを推測したことを意味する。
ルールは何ですか?私が知らない価値の制限のようなものがありますか?それとも、私は物事が複雑すぎて、Rustはもっと厳しい規則を持っています(一般化は全くありません)?私は間違っていないよ場合
ラスト型推論をレビューする作業が進行中です.Niko Matsakisは、新しい統一エンジンについてのブログを書いています。[統一インチョーク - パート1](http://smallcultfollowing.com/ babysteps/blog/2017/03/25 /統一 - チョーク - パート-1 /)と[チョークの統一 - 第2部](http://smallcultfollowing.com/babysteps/blog/2017/04/23/unificationインチョークパート2 /)。 @MatthieuM。 –
。ありがとう、私はこれを読むよ! –