TL;DR
Rust のパッケージマネージャ。依存するパッケージをダウンロードし、パッケージをコンパイルし、配布用のパッケージを作って crates.io に公開する。
なぜ必要か
The Cargo Book によると、Rust のライブラリや実行ファイル(クレート)は、コンパイラ rustc でコンパイルする。しかし rustc を直接使うと、プログラムごとにコマンドの書き方が変わる。依存する外部ライブラリと、さらにその依存まで正しいバージョンで集め、最新に保つのを手作業で行うのは難しく、間違いやすい。Cargo は「パッケージ」という一段上の抽象を導入して、こうした作業を引き受ける。
仕組み
Cargo はパッケージの情報を書くメタデータファイルを導入している。プロジェクトの管理情報を書く Cargo.toml もその 1 つである。Cargo は依存パッケージを取得してビルドし、正しい引数で rustc などを呼び出す。利用者は rustc を直接呼ばず、cargo build のような共通のコマンドを実行すればよい。
依存のバージョンは SemVer に従って選ばれる。Effective Rust 項目21 によると、Cargo は指定された範囲の中で最も新しいバージョンを選ぶ。項目25 によると、同じクレートの複数のバージョンを依存グラフに含められるが、それらは SemVer で非互換なバージョンでなければならない。
例
標準のサブコマンドに加えて、cargo-nextest や cargo-expand のような拡張ツールをサブコマンドとして使える。Effective Rust 項目31 は、こうしたツールの一覧はすぐ古くなるので、使えるツールを自分で探すよう勧めている。