百鬼夜行

素性を知られぬままエンジニアになることを目指します

「The Book」で Rust 入門 1

前回nannouをインストールしたにもかかわらずろくに触れないので「The Book」を読み込んでみる。2nd Editionです。

まえがき - The Rust Programming Language

yagyosan.hatenablog.com

前書き

  • Rustの根本原理は「エンパワーメント」
  • 難解な低レイヤーのプログラミングがよりやりやすい
  • Rustは低レイヤーだけでなくWebアプリなど他の範囲に適用できる

事始め

インストール

インストール - The Rust Programming Language

$ curl https://sh.rustup.rs -sSf | sh
...
$ export PATH="$HOME/.cargo/bin:$PATH"

インストールして、僕はzsh使っているので ~/.zprofile にPATHを追加。 アップデートとアンインストールは rustup を使う。docも開ける。 rustc --version したら rustc 1.29.1 (b801ae664 2018-09-20) だった。

  • リンカー とは...?
  • フォーラムとIRCもチェックする

Hello, World!

github.com

今回はrust_studyディレクトリを作って、その中でやることにした。 書いたコードはこちらに全て置いてある。

  • 末尾は.rs
  • rustcコンパイルし、実行可能ファイルが生成されるので、ターミナルから実行する
  • fn main() は常にすべての実行可能なRustプログラムで走る最初のコードになり、引数がない
  • rustfmtという自動整形ツールは開発中
  • 4つのスペースでインデント
  • ;を行末につける
  • 簡単なプログラムならrustcで十分だが、肥大化してきたらCargoツールを使う

Hello, Cargo!

cargoを使って新しいプロジェクトを作成できる。

$ cargo new hello_cargo --bin
$ cd hello_cargo
  • --binはバイナリの実行可能ファイルを作る
  • Cargo.tomlファイル、Gitファイル群、main.rsが入ったsrcディレクトリが生成される
  • Cargo.tomlの中身は[package][dependencies]のセクションヘッダーがある
    • [package]: 後の文がパッケージを設定することを示す
    • [dependencies]: プロジェクトの依存を列挙する
    • パッケージのコードはクレート?(多分後で出てくる)として参照される
  • Cargoを使う場合はファイルがsrc内にあることを期待する
  • 最上位ディレクトリはCargoと、READMEなど他のコードに関連しないもの

次にビルドをする。

$ cargo build
$ ./target/debug/hello_cargo
Hello, world!
  • ビルドした時にCargo.locktargetフォルダができる
  • cargo runでビルドと実行を同時にできる
  • runした時、ファイル変更を検知しなかった場合はコンパイルをスキップする
  • cargo checkは実行可能ファイルをつくらずコンパイルできるかをチェックする

OKだったらリリースビルドをする。

$ cargo build --release
   Compiling hello_cargo v0.1.0 (file:///Users/yagyosan/Develop/rust_study/hello_cargo)
    Finished release [optimized] target(s) in 1.57s
  • target/releaseに実行可能ファイルが作成される
  • 再ビルドをかける開発用はdebug、再ビルドせず高速に動くユーザー用はrelease