关于
1.
Part 1: 构建,调试和向rustc贡献代码
❱
1.1.
About the compiler team
1.2.
如何构建并运行编译器
❱
1.2.1.
推荐的工作流程
1.2.2.
编译器自举
1.2.3.
Distribution artifacts
1.2.4.
Documenting Compiler
1.2.5.
ctags
1.3.
The compiler testing framework
❱
1.3.1.
Running tests
1.3.2.
Adding new tests
1.3.3.
Using compiletest + commands to control test execution
1.4.
Walkthrough: a typical contribution
1.5.
Bug Fix Procedure
1.6.
Implementing new features
1.7.
Stability attributes
1.8.
Stabilizing Features
1.9.
Debugging the Compiler
1.10.
Profiling the compiler
❱
1.10.1.
with the linux perf tool
1.11.
Coding conventions
1.12.
crates.io Dependencies
1.13.
Emitting Errors and other Diagnostics
❱
1.13.1.
LintStore
1.13.2.
Diagnostic Codes
1.14.
ICE-breaker teams
❱
1.14.1.
"Cleanup Crew" ICE-breakers
1.14.2.
LLVM ICE-breakers
1.15.
Licenses
2.
Part 2: 高层编译器架构
❱
2.1.
Overview of the Compiler
2.2.
编译器源码结构
2.3.
查询:需求驱动的编译
❱
2.3.1.
查询求值模型的详细介绍
2.3.2.
Incremental compilation
2.3.3.
Incremental compilation In Detail
2.3.4.
Debugging and Testing
2.3.5.
Profiling Queries
2.3.6.
Salsa
2.4.
Memory Management in Rustc
3.
Part 3: 源代码的不同表示
❱
3.1.
The Rustc Driver and Interface
❱
3.1.1.
Rustdoc
3.1.2.
Ex: Type checking through rustc_interface
3.2.
符号与AST
❱
3.2.1.
词法分析与文法分析
3.2.2.
#[test] Implementation
3.2.3.
Panic Implementation
3.2.4.
Macro expansion
3.2.5.
Name resolution
3.2.6.
AST Validation
3.2.7.
Feature Gate Checking
3.3.
HIR (高层IR)
❱
3.3.1.
将AST lower 到 HIR
3.3.2.
Debugging
3.4.
MIR (中层IR)
❱
3.4.1.
HAIR 与 MIR 的构造
3.4.2.
MIR 访问者与遍历
3.4.3.
MIR passes: 为一个函数获取MIR
3.5.
Closure expansion
4.
Part 4: 分析
❱
4.1.
ty 模块:类型的表示
❱
4.1.1.
范型和替换
4.1.2.
TypeFolder and TypeFoldable
4.1.3.
Generic arguments
4.2.
Type inference
4.3.
Trait solving (old-style)
❱
4.3.1.
Higher-ranked trait bounds
4.3.2.
Caching subtleties
4.3.3.
Specialization
4.4.
Trait solving (new-style)
❱
4.4.1.
Lowering to logic
❱
4.4.1.1.
Goals and clauses
4.4.1.2.
Equality and associated types
4.4.1.3.
Implied bounds
4.4.1.4.
Region constraints
4.4.1.5.
The lowering module in rustc
4.4.1.6.
Lowering rules
4.4.1.7.
Well-formedness checking
4.4.2.
Canonical queries
❱
4.4.2.1.
Canonicalization
4.4.3.
The SLG solver
4.4.4.
An Overview of Chalk
4.4.5.
Bibliography
4.5.
Type checking
❱
4.5.1.
Method Lookup
4.5.2.
Variance
4.5.3.
Opaque Types
4.6.
Pattern and Exhaustiveness Checking
4.7.
The borrow checker
❱
4.7.1.
Tracking moves and initialization
❱
4.7.1.1.
Move paths
4.7.2.
MIR type checker
4.7.3.
Region inference
❱
4.7.3.1.
Constraint propagation
4.7.3.2.
Lifetime parameters
4.7.3.3.
Member constraints
4.7.3.4.
Placeholders and universes
4.7.3.5.
Closure constraints
4.7.3.6.
Error reporting
4.7.4.
Two-phase-borrows
4.8.
Parameter Environments
5.
Part 5: From MIR to binaries
❱
5.1.
The MIR (Mid-level IR)
❱
5.1.1.
MIR optimizations
5.1.2.
Debugging
5.2.
Constant evaluation
❱
5.2.1.
miri const evaluator
5.3.
Monomorphization
5.4.
Lowering MIR
5.5.
Code Generation
❱
5.5.1.
Updating LLVM
5.5.2.
Debugging LLVM
5.5.3.
Backend Agnostic Codegen
5.5.4.
Implicit Caller Location
5.6.
Profile-guided Optimization
5.7.
Sanitizers Support
5.8.
Debugging Support in Rust Compiler
Appendix A: Background material
Appendix B: Glossary
Appendix C: Code Index
Appendix D: Compiler Lecture Series
Appendix E: Bibliography
Appendix Z: HumorRust
Light (default)
Rust
Coal
Navy
Ayu
Guide to Rustc Development
Reporting region errors
TODO: we should discuss how to generate errors from the results of these analyses.