Concepts
How rustup works
rustup
is a toolchain multiplexer. It installs and manages many Rust
toolchains and presents them all through a single set of tools installed to
~/.cargo/bin
. The rustc
and cargo
executables installed in
~/.cargo/bin
are proxies that delegate to the real toolchain. rustup
then provides mechanisms to easily change the active toolchain by
reconfiguring the behavior of the proxies.
So when rustup
is first installed, running rustc
will run the proxy in
$HOME/.cargo/bin/rustc
, which in turn will run the stable compiler. If you
later change the default toolchain to nightly with rustup default nightly
,
then that same proxy will run the nightly
compiler instead.
This is similar to Ruby’s rbenv, Python’s pyenv, or Node’s nvm.
Terminology
-
channel — Rust is released to three different “channels”: stable, beta, and nightly. See the Channels chapter for more details.
-
toolchain — A “toolchain” is a complete installation of the Rust compiler (
rustc
) and related tools (likecargo
). A toolchain specification includes the release channel or version, and the host platform that the toolchain runs on. -
target —
rustc
is capable of generating code for many platforms. The “target” specifies the platform that the code will be generated for. By default,cargo
andrustc
use the host toolchain’s platform as the target. To build for a different target, usually the target’s standard library needs to be installed first via therustup target
command. See the Cross-compilation chapter for more details. -
component — Each release of Rust includes several “components”, some of which are required (like
rustc
) and some that are optional (likeclippy
). See the Components chapter for more detail. -
profile — In order to make it easier to work with components, a “profile” defines a grouping of components. See the Profiles chapter for more details.
-
proxy — A wrapper for a common Rust component (like
rustc
), built to forward CLI invocations to the active Rust toolchain. See the Proxies chapter for more details.