more seasoned developers, some useful places to look for information
are:
-* The [rustc guide] contains information about how various parts of the compiler work and how to contribute to the compiler
+* The [rustc dev guide] contains information about how various parts of the compiler work and how to contribute to the compiler
* [Rust Forge][rustforge] contains additional documentation, including write-ups of how to achieve common tasks
* The [Rust Internals forum][rif], a place to ask questions and
discuss Rust's internals
* **Google!** ([search only in Rust Documentation][gsearchdocs] to find types, traits, etc. quickly)
* Don't be afraid to ask! The Rust community is friendly and helpful.
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
[gdfrustc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc/
[gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here
[rif]: http://internals.rust-lang.org
The Rust build system has a Python script called `x.py` to bootstrap building
the compiler. More information about it may be found by running `./x.py --help`
-or reading the [rustc guide][rustcguidebuild].
+or reading the [rustc dev guide][rustcguidebuild].
[rustcguidebuild]: https://rust-lang.github.io/rustc-dev-guide/building/how-to-build-and-run.html
community, documentation, and all major contribution areas in the Rust ecosystem.
A good place to ask for help would be the #help channel.
-The [rustc guide] might be a good place to start if you want to find out how
+The [rustc dev guide] might be a good place to start if you want to find out how
various parts of the compiler work.
Also, you may find the [rustdocs for the compiler itself][rustdocs] useful.
[rust-discord]: https://discord.gg/rust-lang
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
[rustdocs]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc/
## License
- `libstd`
- Various submodules for tools, like rustdoc, rls, etc.
-For more information on how various parts of the compiler work, see the [rustc guide].
+For more information on how various parts of the compiler work, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/about-this-guide.html
-For more information about how rustc works, see the [rustc guide].
+For more information about how rustc works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/
To learn more about how dependency tracking works in rustc, see the [rustc
guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
/// what state they have access to. In particular, we want to
/// prevent implicit 'leaks' of tracked state into the task (which
/// could then be read without generating correct edges in the
- /// dep-graph -- see the [rustc guide] for more details on
+ /// dep-graph -- see the [rustc dev guide] for more details on
/// the dep-graph). To this end, the task function gets exactly two
/// pieces of state: the context `cx` and an argument `arg`. Both
/// of these bits of state must be of some type that implements
/// - If you need 3+ arguments, use a tuple for the
/// `arg` parameter.
///
- /// [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/incremental-compilation.html
+ /// [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/incremental-compilation.html
pub fn with_task<'a, C, A, R>(
&self,
key: DepNode,
-//! HIR datatypes. See the [rustc guide] for more info.
+//! HIR datatypes. See the [rustc dev guide] for more info.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
pub mod exports;
pub mod map;
//! `instantiate_query_result` method.
//!
//! For a more detailed look at what is happening here, check
-//! out the [chapter in the rustc guide][c].
+//! out the [chapter in the rustc dev guide][c].
//!
//! [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html
//! (or `tcx`), which is the central context during most of
//! compilation, containing the interners and other things.
//!
-//! For more information about how rustc works, see the [rustc guide].
+//! For more information about how rustc works, see the [rustc dev guide].
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/
//!
//! # Note
//!
//! the parent links in the region hierarchy.
//!
//! For more information about how MIR-based region-checking works,
-//! see the [rustc guide].
+//! see the [rustc dev guide].
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/mir/borrowck.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/mir/borrowck.html
use crate::ich::{NodeIdHashingMode, StableHashingContext};
use crate::ty::{self, DefIdTree, TyCtxt};
-//! MIR datatypes and passes. See the [rustc guide] for more info.
+//! MIR datatypes and passes. See the [rustc dev guide] for more info.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/mir/index.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/mir/index.html
use crate::mir::interpret::{GlobalAlloc, Scalar};
use crate::mir::visit::MirVisitable;
-//! Trait Resolution. See the [rustc guide] for more information on how this works.
+//! Trait Resolution. See the [rustc dev guide] for more information on how this works.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html
pub mod query;
pub mod select;
-//! Candidate selection. See the [rustc guide] for more information on how this works.
+//! Candidate selection. See the [rustc dev guide] for more information on how this works.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#selection
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#selection
use self::EvaluationResult::*;
/// The central data structure of the compiler. It stores references
/// to the various **arenas** and also houses the results of the
/// various **compiler queries** that have been performed. See the
-/// [rustc guide] for more details.
+/// [rustc dev guide] for more details.
///
-/// [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/ty.html
+/// [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/ty.html
#[derive(Copy, Clone)]
#[rustc_diagnostic_item = "TyCtxt"]
pub struct TyCtxt<'tcx> {
-For more information about how the query system works, see the [rustc guide].
+For more information about how the query system works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
/// the inference variable is supposed to satisfy the relation
/// *for every value of the placeholder region*. To ensure that doesn't
/// happen, you can use `leak_check`. This is more clearly explained
-/// by the [rustc guide].
+/// by the [rustc dev guide].
///
/// [1]: http://smallcultfollowing.com/babysteps/blog/2013/10/29/intermingled-parameter-lists/
/// [2]: http://smallcultfollowing.com/babysteps/blog/2013/11/04/intermingled-parameter-lists/
-/// [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/hrtb.html
+/// [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/hrtb.html
#[derive(Clone, PartialEq, Eq, Hash, Copy, RustcEncodable, RustcDecodable, PartialOrd, Ord)]
pub enum RegionKind {
/// Region bound in a type or fn declaration which will be
lexer, macro expander, and utilities for traversing ASTs.
For more information about how these things work in rustc, see the
-rustc guide:
+rustc dev guide:
- [Parsing](https://rust-lang.github.io/rustc-dev-guide/the-parser.html)
- [Macro Expansion](https://rust-lang.github.io/rustc-dev-guide/macro-expansion.html)
and then from LLVM IR into machine code. In general it contains code
that runs towards the end of the compilation process.
-For more information about how codegen works, see the [rustc guide].
+For more information about how codegen works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/codegen.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/codegen.html
have some code related to pretty printing or other minor compiler
options).
-For more information about how the driver works, see the [rustc guide].
+For more information about how the driver works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/rustc-driver.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/rustc-driver.html
/// The top-level data structure that stores the entire contents of
/// the crate currently being compiled.
///
-/// For more details, see the [rustc guide].
+/// For more details, see the [rustc dev guide].
///
-/// [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
+/// [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
#[derive(RustcEncodable, RustcDecodable, Debug)]
pub struct Crate<'hir> {
pub module: Mod<'hir>,
-//! HIR datatypes. See the [rustc guide] for more info.
+//! HIR datatypes. See the [rustc dev guide] for more info.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/hir.html
#![feature(crate_visibility_modifier)]
#![feature(const_fn)] // For the unsizing cast on `&[]`
-For info on how the incremental compilation works, see the [rustc guide].
+For info on how the incremental compilation works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/query.html
//! This module contains the "canonicalizer" itself.
//!
//! For an overview of what canonicalization is and how it fits into
-//! rustc, check out the [chapter in the rustc guide][c].
+//! rustc, check out the [chapter in the rustc dev guide][c].
//!
//! [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html
/// with a mapping M that maps `'?0` to `'static`.
///
/// To get a good understanding of what is happening here, check
- /// out the [chapter in the rustc guide][c].
+ /// out the [chapter in the rustc dev guide][c].
///
/// [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html#canonicalizing-the-query
pub fn canonicalize_query<V>(
/// reference to `'static` alone.
///
/// To get a good understanding of what is happening here, check
- /// out the [chapter in the rustc guide][c].
+ /// out the [chapter in the rustc dev guide][c].
///
/// [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html#canonicalizing-the-query-result
pub fn canonicalize_response<V>(&self, value: &V) -> Canonicalized<'tcx, V>
//! `instantiate_query_result` method.
//!
//! For a more detailed look at what is happening here, check
-//! out the [chapter in the rustc guide][c].
+//! out the [chapter in the rustc dev guide][c].
//!
//! [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html
//! encode them therein.
//!
//! For an overview of what canonicaliation is and how it fits into
-//! rustc, check out the [chapter in the rustc guide][c].
+//! rustc, check out the [chapter in the rustc dev guide][c].
//!
//! [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html
/// the query before applying this function.)
///
/// To get a good understanding of what is happening here, check
- /// out the [chapter in the rustc guide][c].
+ /// out the [chapter in the rustc dev guide][c].
///
/// [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html#processing-the-canonicalized-query-result
pub fn instantiate_query_response_and_region_obligations<R>(
//! `Canonical<'tcx, T>`.
//!
//! For an overview of what canonicalization is and how it fits into
-//! rustc, check out the [chapter in the rustc guide][c].
+//! rustc, check out the [chapter in the rustc dev guide][c].
//!
//! [c]: https://rust-lang.github.io/rustc-dev-guide/traits/canonicalization.html
/// needed (but is also permitted).
///
/// For more information about how placeholders and HRTBs work, see
- /// the [rustc guide].
+ /// the [rustc dev guide].
///
- /// [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/hrtb.html
+ /// [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/hrtb.html
pub fn replace_bound_vars_with_placeholders<T>(
&self,
binder: &ty::Binder<T>,
-For info on how the current borrowck works, see the [rustc guide].
+For info on how the current borrowck works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/borrow_check.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/borrow_check.html
//! this code handles low-level equality and subtyping operations. The
//! type check pass in the compiler is found in the `librustc_typeck` crate.
//!
-//! For more information about how rustc works, see the [rustc guide].
+//! For more information about how rustc works, see the [rustc dev guide].
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/
//!
//! # Note
//!
-//! Trait Resolution. See the [rustc guide] for more information on how this works.
+//! Trait Resolution. See the [rustc dev guide] for more information on how this works.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html
#[allow(dead_code)]
pub mod auto_trait;
// ignore-tidy-filelength
-//! Candidate selection. See the [rustc guide] for more information on how this works.
+//! Candidate selection. See the [rustc dev guide] for more information on how this works.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#selection
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#selection
use self::EvaluationResult::*;
use self::SelectionCandidate::*;
//
// The selection process begins by examining all in-scope impls,
// caller obligations, and so forth and assembling a list of
- // candidates. See the [rustc guide] for more details.
+ // candidates. See the [rustc dev guide] for more details.
//
- // [rustc guide]:
+ // [rustc dev guide]:
// https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#candidate-assembly
fn candidate_from_obligation<'o>(
//
// Confirmation unifies the output type parameters of the trait
// with the values found in the obligation, possibly yielding a
- // type error. See the [rustc guide] for more details.
+ // type error. See the [rustc dev guide] for more details.
//
- // [rustc guide]:
+ // [rustc dev guide]:
// https://rust-lang.github.io/rustc-dev-guide/traits/resolution.html#confirmation
fn confirm_candidate(
//! At the moment, this implementation support only the simple "chain" rule:
//! If any two impls overlap, one must be a strict subset of the other.
//!
-//! See the [rustc guide] for a bit more detail on how specialization
+//! See the [rustc dev guide] for a bit more detail on how specialization
//! fits together with the rest of the trait machinery.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/traits/specialization.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/traits/specialization.html
pub mod specialization_graph;
use specialization_graph::GraphExt;
//! the parent links in the region hierarchy.
//!
//! For more information about how MIR-based region-checking works,
-//! see the [rustc guide].
+//! see the [rustc dev guide].
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/borrow_check.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/borrow_check.html
use rustc::hir::map::Map;
use rustc::middle::region::*;
`librustc_target` contains some very low-level details that are
specific to different compilation targets and so forth.
-For more information about how rustc works, see the [rustc guide].
+For more information about how rustc works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/
}
}
-/// Used for implied bounds related rules (see rustc guide).
+/// Used for implied bounds related rules (see rustc dev guide).
trait IntoFromEnvGoal {
/// Transforms an existing goal into a `FromEnv` goal.
fn into_from_env_goal(self) -> Self;
}
-/// Used for well-formedness related rules (see rustc guide).
+/// Used for well-formedness related rules (see rustc dev guide).
trait IntoWellFormedGoal {
/// Transforms an existing goal into a `WellFormed` goal.
fn into_well_formed_goal(self) -> Self;
fn program_clauses_for_trait(tcx: TyCtxt<'_>, def_id: DefId) -> Clauses<'_> {
// `trait Trait<P1..Pn> where WC { .. } // P0 == Self`
- // Rule Implemented-From-Env (see rustc guide)
+ // Rule Implemented-From-Env (see rustc dev guide)
//
// ```
// forall<Self, P1..Pn> {
return List::empty();
}
- // Rule Implemented-From-Impl (see rustc guide)
+ // Rule Implemented-From-Impl (see rustc dev guide)
//
// `impl<P0..Pn> Trait<A1..An> for A0 where WC { .. }`
//
}
pub fn program_clauses_for_associated_type_value(tcx: TyCtxt<'_>, item_id: DefId) -> Clauses<'_> {
- // Rule Normalize-From-Impl (see rustc guide)
+ // Rule Normalize-From-Impl (see rustc dev guide)
//
// ```
// impl<P0..Pn> Trait<A1..An> for A0 {
For high-level intro to how type checking works in rustc, see the
-[type checking] chapter of the [rustc guide].
+[type checking] chapter of the [rustc dev guide].
[type checking]: https://rust-lang.github.io/rustc-dev-guide/type-checking.html
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/
-//! Method lookup: the secret sauce of Rust. See the [rustc guide] for more information.
+//! Method lookup: the secret sauce of Rust. See the [rustc dev guide] for more information.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/method-lookup.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/method-lookup.html
mod confirm;
pub mod probe;
-//! Module for inferring the variance of type and lifetime parameters. See the [rustc guide]
+//! Module for inferring the variance of type and lifetime parameters. See the [rustc dev guide]
//! chapter for more info.
//!
-//! [rustc guide]: https://rust-lang.github.io/rustc-dev-guide/variance.html
+//! [rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/variance.html
use hir::Node;
use rustc::ty::query::Providers;
-For more information about how `librustdoc` works, see the [rustc guide].
+For more information about how `librustdoc` works, see the [rustc dev guide].
-[rustc guide]: https://rust-lang.github.io/rustc-dev-guide/rustdoc.html
+[rustc dev guide]: https://rust-lang.github.io/rustc-dev-guide/rustdoc.html
# Compiler Test Documentation
Documentation for the compiler testing framework can be found in
-[the rustc guide](https://rust-lang.github.io/rustc-dev-guide/tests/intro.html).
+[the rustc dev guide](https://rust-lang.github.io/rustc-dev-guide/tests/intro.html).