🙆‍♀️

rustup, rustc, cargoの位置付けと違い

2023/09/07に公開


rustupとrustcとcargoそれぞれの関連性と違いがよくわからなかったので調べた備忘です。作成時点ではRust 1.72.0です。ざっくりなので間違っているかもしれません。

位置付け

  • rustup (Rust環境管理: コンパイラ更新,コンポーネント管理,クロスコンパイル準備 等)
    • rustc (コンパイラ)
    • cargo (ビルドツール兼パッケージマネージャ)
    • (標準ライブラリ, ドキュメント, 等)

調べた所感

  • rustupはRust全体の管理担当でrustccargo等のコンポーネントは被管理対象
    • cargo installでもコンポーネント追加可能だが、rustup component addの方が良さそう
    • rustup component addはバイナリDL、cargo installはソースDL後ローカルでビルドされる違いがある
  • 直接rustcを使用することはあまりなさそう
  • 普段はcargoの操作だけで完結しそう
    • new -> (add) -> run -> test -> doc -> build --release

よく使いそうなコマンド

  • rustup self update : 最新バージョンのrustupに更新
  • rustup update : 最新バージョンのRustに更新 (rustc, cargo, rustfmt等を更新)
  • rustup component add <COMPONENT> : コンポーネント追加
  • rustup target add <PLATFORM> : ビルド対象プラットフォーム追加
  • rustc -V : Rustバージョン表示
  • cargo new <PATH> : PATHにRustプロジェクトディレクトリを作成,構成する
  • cargo init : カレントディレクトリをRustプロジェクト用に構成する
  • cargo search <NAME> : 名前を含むクレートを検索
  • cargo add <PACKAGE> : Cargo.tomlのdependenciesにクレートを追加
  • cargo remove <PACKAGE> : Cargo.tomlのdependenciesからクレートを削除
  • cargo run : デバッグ用ビルド後に実行
  • cargo test : テスト用関数もビルドしそれらの実行結果表示
  • cargo doc : プロジェクトのドキュメントを生成
  • cargo build --release : コード最適化を含めてリリースビルド

参考文献

Discussion