나는 Rust가 Hindley-Milner를 사용하여 매우 좋은 유추 추론을했다고 읽었습니다. Rust는 또한 변이 변수를 가지며 AFAIK는 HM 알고리즘이 지나치게 일반화 될 수 있기 때문에 가변성으로 작동 할 때 몇 가지 제약이 있어야합니다. 다음 코드 : 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);
이 오류는 다시 실패하지만 마지막 행은 다시 실패합니다. 즉, 두 번째 행은 유형을 부분적으로 추론하고 (Vec) 세 번째 행은 컨테이너 유형을 유추했습니다.
어떤 규칙이 적용됩니까? 내가 알지도 못하는 가치 제한 같은 것이 있습니까? 아니면 나는 과잉 복잡하고 녹이 훨씬 엄격한 규칙을 가졌습니까 (전혀 일반화하지 않은 것처럼)? 내가 잘못 아니에요 경우
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. 고마워, 내가 이것을 읽을거야! –