Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

HIR 타입 검사

hir_analysis 크레이트에는 “타입 수집“을 위한 소스와 여러 관련 기능이 들어 있습니다. 함수 본문 검사는 hir_typeck 크레이트에 구현되어 있습니다. 이 크레이트들은 타입 추론과 트레이트 해결에 크게 의존합니다.

타입 수집

타입 “수집“은 사용자가 작성한 구문적 요소를 나타내는 HIR의 타입(hir::Ty)을 컴파일러가 사용하는 내부 표현(Ty<'tcx>)으로 변환하는 과정입니다. where 절과 함수 시그니처의 다른 부분에 대해서도 비슷한 변환을 수행한다는 점에 유의하십시오.

그 차이를 이해하기 위해 다음 함수를 살펴봅시다.

struct Foo { }
fn foo(x: Foo, y: self::Foo) { ... }
//        ^^^     ^^^^^^^^^

두 매개변수 x와 y는 각각 같은 타입이지만, 서로 다른 hir::Ty 노드를 갖게 됩니다. 이 노드들은 서로 다른 스팬을 가지며, 당연히 경로도 약간 다르게 인코딩합니다. 그러나 일단 Ty<'tcx> 노드로 “수집“되면, 두 노드는 완전히 같은 내부 타입으로 표현됩니다.

수집은 컴파일 중인 크레이트에 있는 여러 함수, 트레이트, 기타 항목에 대한 정보를 계산하는 쿼리의 묶음으로 정의됩니다. 이 쿼리들은 각각 프로시저 간 사항을 다룬다는 점에 유의하십시오. 예를 들어 함수 정의의 경우, 수집은 함수의 타입과 시그니처를 알아내지만 함수의 본문은 전혀 방문하지 않으며 지역 변수의 타입 표기도 검사하지 않습니다(그것은 타입 검사가 할 일입니다).

자세한 내용은 collect 모듈을 참조하십시오.

TODO: 타입 검사에 대해 실제로 설명해야 합니다… #1161