We use HIR to do type inference, trait solving and type checking (#1139)

* We use HIR to do type inference, trait solving and type checking

* Update src/overview.md

Co-authored-by: Yuki Okushi <jtitor@2k36.org>

* Update src/overview.md

Co-authored-by: Yuki Okushi <jtitor@2k36.org>

* Update src/overview.md

Co-authored-by: Noah Lev <camelidcamel@gmail.com>

* Fix type checking brief explanation

Co-authored-by: Yuki Okushi <jtitor@2k36.org>
Co-authored-by: Noah Lev <camelidcamel@gmail.com>
This commit is contained in:
Santiago Pastorino 2021-06-14 15:35:38 -03:00 committed by GitHub
parent 18493f62b0
commit 29aeb0b2ae
1 changed files with 10 additions and 4 deletions

View File

@ -68,10 +68,14 @@ we'll talk about that later.
- We then take the AST and [convert it to High-Level Intermediate - We then take the AST and [convert it to High-Level Intermediate
Representation (HIR)][hir]. This is a compiler-friendly representation of the Representation (HIR)][hir]. This is a compiler-friendly representation of the
AST. This involves a lot of desugaring of things like loops and `async fn`. AST. This involves a lot of desugaring of things like loops and `async fn`.
- We use the HIR to do [type inference]. This is the process of automatic - We use the HIR to do [type inference] (the process of automatic
detection of the type of an expression. detection of the type of an expression), [trait solving] (the process
- **TODO: Maybe some other things are done here? I think initial type checking of pairing up an impl with each reference to a trait), and [type
happens here? And trait solving?** checking] (the process of converting the types found in the HIR
(`hir::Ty`), which represent the syntactic things that the user wrote,
into the internal representation used by the compiler (`Ty<'tcx>`),
and using that information to verify the type safety, correctness and
coherence of the types used in the program).
- The HIR is then [lowered to Mid-Level Intermediate Representation (MIR)][mir]. - The HIR is then [lowered to Mid-Level Intermediate Representation (MIR)][mir].
- Along the way, we construct the THIR, which is an even more desugared HIR. - Along the way, we construct the THIR, which is an even more desugared HIR.
THIR is used for pattern and exhaustiveness checking. It is also more THIR is used for pattern and exhaustiveness checking. It is also more
@ -111,6 +115,8 @@ we'll talk about that later.
[parser]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html [parser]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
[hir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/index.html [hir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/index.html
[type inference]: https://rustc-dev-guide.rust-lang.org/type-inference.html [type inference]: https://rustc-dev-guide.rust-lang.org/type-inference.html
[trait solving]: https://rustc-dev-guide.rust-lang.org/traits/resolution.html
[type checking]: https://rustc-dev-guide.rust-lang.org/type-checking.html
[mir]: https://rustc-dev-guide.rust-lang.org/mir/index.html [mir]: https://rustc-dev-guide.rust-lang.org/mir/index.html
[borrow checking]: https://rustc-dev-guide.rust-lang.org/borrow_check.html [borrow checking]: https://rustc-dev-guide.rust-lang.org/borrow_check.html
[mir-opt]: https://rustc-dev-guide.rust-lang.org/mir/optimizations.html [mir-opt]: https://rustc-dev-guide.rust-lang.org/mir/optimizations.html