Open4

Rust book学習

takumitakumi

rustは低レベルコードが書きやすい?

  • 並列処理
  • メモリ管理
    などなど

cargoは依存関係管理ツール兼ビルドツール
rustfmtは一貫したコーディングスタイルを保証→gofmtみたいな感じ?(保存すると整形してくれるみたいな)

takumitakumi

事始め

rustはrustupというツールでダウンロードできる
rustは別プロジェクトでインストール済み

$ rustup
rustup 1.27.0 (bbb9276d2 2024-03-08)

rustupの更新

rustup update

インストール確認

rustc --version
rustc 1.77.2 (25ef9e3d8 2024-04-09)

rustup docでローカルのドキュメントが見れるみたい
あとで見てみる

hello worldしてみる

fn main() {
    println!("Hello, world!!")
}
rustc main.rs
./main
Hello, world!!

セミコロンあってもなくても実行できた(あとで調査する)

  • RustはAOTコンパイル言語
    • rustcで実行可能ファイルにすればrustをインストールしていない人でも実行できる

cargoはrustのビルドシステム兼パッケージマネージャ
cargoでプロジェクト作成する

cargo new rust-book

上記コマンドでCargo.tomlファイルが作成された
jsでいうpackage.json的なもの?
tomlはTom's Obvious, Minimal Languageの略らしい

rustではパッケージのことをクレートと呼ぶ

cargoでビルドするにはcargo build

cargo build
# ./target/debug/rust-bookに実行ファイルができた
# 実行するとHello, world!が出力

cargo runでビルドと実行

cargo run
#  Hello, world!

cargo checkで正常にコンパイルできるか確認

まとめ

  • rustのインストール
  • コードの実行
  • cargoの使い方
    • new, build, run, check
takumitakumi

数当てゲームのプログラミング

rustでは変数はデフォルトでimmutableになる→3章で説明
mutをつけることでmutableになる

newは関連関数?

rustは汎用型としてResult型が存在する。今回のコードの場合はio::Resultのようなサブモジュール用の型がread_lineから返される。Resultについて何も処理しないと警告が出るのでexpectなどでエラーの処理を追加する。

io::stdin()
        .read_line(&mut guess);
        .expect("Failed to read line"); // <-- この処理がないと警告が出る

cargoは外部依存がある場合には、Crete.ioから最新のバージョンを取得してくる