rustc compiler includes over 380,000 lines of source across more than 40 crates1 to support the lexing through binary linking stages of the Rust compile process. It is daunting for newcomers, and we recognize that a high-level survey of the pipeline is warranted.
In our December update, we announced plans for the publication of the "rustc-dev-guide Overview". Our goal is to describe the integrated components of the compiler in a high-level document for users and potential developers. The Overview will be published at the beginning of the rustc-dev-guide to orient readers to the more detailed documentation of the compiler in subsequent chapters.
Rustc Overview Structure
We will break the compiler down to address two questions at a high-level:
- What does the compiler do to your source code?
- How does the compiler do it?
As we address these general areas, we will provide a synopsis that briefly covers frequent community questions like:
- What are the conflicting goals of the compiler, and how are issues like compiler speed, compiler memory usage, program speed, program size, and compiler stability/correctness balanced?
- What are the stages of the compile process, and how do they fit together?
- What are the intermediate representations of my source code?
- What happens to generics during the compile process?
- What kind of optimizations are performed during the compile process?
- How does incremental compilation work?
rustchave support for parallel compilation?
Work is in progress on the Overview, and we need your help. A working draft of the document is available in this pull request on the
rustc-dev-guide GitHub repository.
If there is an area of
rustc that you would like to understand better and it is appropriate for an overview document, please open an issue on our issue tracker to let us know.
And if you know the compiler and want to pitch in on the rustc-dev-guide Overview, open a pull request with your revisions. We welcome your contributions and look forward to your participation!
Interested in Learning (Working Group)?
Are you interested in learning more about the
rustc compiler and teaching others? Drop by our Zulip stream and say hello!
1 These numbers account for lines in Rust files across all dependencies necessary to build
rustc. Thanks to @LeSeulArtichaut for these calculations! See the notes on Zulip for additional details.