the-rust-programming-language

Rust "The Book" やる

開発環境

  • macOS 12.5.1
  • rustup 1.25.1 (bb60b1e89 2022-07-12)
  • rustc 1.66.0 (69f9c33d7 2022-12-12)
  • cargo 1.66.0 (d65d197ad 2022-11-15)

目次

  • はじめに
  • 1. 事始め
    • 1.1. インストール
    • 1.2. Hello, World!
    • 1.3. Hello, Cargo!
  • 2. 数当てゲームのプログラミング
  • 3. 一般的なプログラミングの概念
    • 3.1. 変数と可変性
    • 3.2. データ型
    • 3.3. 関数
    • 3.4. コメント
    • 3.5. 制御フロー
  • 4. 所有権を理解する
    • 4.1. 所有権とは?
    • 4.2. 参照と借用
    • 4.3. スライス型
  • 5. 構造体を使用して関係のあるデータを構造化する
    • 5.1. 構造体を定義し、インスタンス化する
    • 5.2. 構造体を使ったプログラム例
    • 5.3. メソッド記法
  • 6. Enum とパターンマッチング
    • 6.1. Enum を定義する
    • 6.2. match 制御フロー演算子
    • 6.3. if let で簡潔な制御フロー
  • 7. 肥大化していくプロジェクトをパッケージ、クレート、モジュールを利用して管理する
  • 8. 一般的なコレクション
  • 9. エラー処理
  • 10. ジェネリック型、トレイト、ライフタイム
  • 11. 自動テストを書く
  • 12. 入出力プロジェクト:コマンドラインプログラムを構築する
  • 13. 関数型言語の機能:イテレータとクロージャ
  • 14. Cargo と Crates.io についてより詳しく
  • 15. スマートポインタ
    • 15.1. ヒープのデータを指す Box<T> を使用する
    • 15.2. Deref トレイトでスマートポインタを普通の参照のように扱う
    • 15.3. Drop トレイトで片付け時にコードを走らせる
    • 15.4. Rc<T> は、参照カウント方式のスマートポインタ
    • 15.5. RefCell<T> と内部可変性パターン
    • 15.6. 循環参照は、メモリをリークすることもある
  • 16. 恐れるな!並行性( |
    • 16.1. スレッドを使用してコードを同時に走らせる
    • 16.2. メッセージ受け渡しを使ってスレッド間でデータを転送する
    • 16.3. 状態共有並行性
    • 16.4. SyncSend トレイトで拡張可能な並行性
  • 17. Rust のオブジェクト指向プログラミング機能
  • 18. パターンとマッチング
  • 19. 高度な機能
  • 20. 最後のプロジェクト:マルチスレッドの Web サーバを構築する
  • 21. 付録
    • 21.1. 付録 A:キーワード
    • 21.2. 付録 B:演算子と記号
    • 21.3. 付録 C:導出可能なトレイト
    • 21.4. 付録 D:便利な開発ツール
    • 21.5. 付録 E:エディション
    • 21.6. 付録 F:本の翻訳
    • 21.7. 付録 G:Rust の作られ方と“Nightly Rust”

用語

  • rustup
    • Rust のバージョンと関連するツールを管理する CLI ツール
  • cargo
    • Rust のパッケージマネージャ兼ビルドシステム
  • クレート crate
    • Cargo によって管理される Rust のパッケージのこと。Python や Node.js などのパッケージの Rust 版の呼び方。
  • Cargo.toml
    • Cargo プロジェクトの設定ファイル
  • Cargo.lock
    • Cargo プロジェクトの依存関係のバージョンを記録、固定するためのファイル。cargo build を初めて実行したときに Cargo プロジェクトのルートディレクトリに生成される。手動で変更する必要はない。

Commands

# rustc
rustc main.rs

# initialize Cargo project
cargo new [project name]
cargo init

# build
cargo build           # 開発用ビルド(最適化なし、ビルド時間短い、実行速度遅い)
cargo build --release # リリース用ビルド(最適化あり、ビルド時間長い、実行速度速い)

# run (build & run)
cargo run
cargo run --release

# compiler check without generate binary
cargo check

# run test
cargo test

# update dependencies
cargo update

# watch (hot reload)
cargo install cargo-watch
cargo watch -x run