コンテンツにスキップ

[The book] 1. Getting Started

Rust The book の第1章 Getting Started

Rustをインストールして、cargoを使ったpackage管理にチャレンジする。

1.1. Installation

Rustのインストール

Rustのバージョンや関連ツールを管理するCLIツールrustupを使う。

rustupはScoopでインストールする。

$ scoop install rustup

本家のサイトは下記。多分Scoopでも同じ事をやっているはず。

Windowsの場合

Windowsの場合はBuild Tools for Visual Studio2019が必要。 (2013以上ならOKなはず)

ダウンロードしたインストーラで必要なのは以下2つだけ。

Rustのバージョン確認

$ rustc --version
rustc 1.45.2 (d3fb005a3 2020-07-31)

1.2. Hello, World!

ファイルの命名規約

  • 拡張子は.rs
  • 単語の区切り文字はアンダースコア

main.rsの作成

main.rs

fn main() {
  println!("Hello, world!");
}

  • インデントはスペース (not タブ)
  • !を末尾に付けると関数の代わりにマクロを呼び出す
  • 文末にはセミコロンをつける

コンパイル

$ rustc main.rs
$ ls
 main.exe   main.pdb   main.rs

main.pdbはデバッグ用の情報(Windowsのみ)。

Rustはahead-of-time compiled languageなのでコンパイルと実行は別。

実行

$ ./main
Hello, world!

1.3. Hello, Cargo!

Cargoはビルドシステム/パッケージマネージャー。

バージョン確認

$ cargo --version
cargo 1.45.1 (f242df6ed 2020-07-22)

プロジェクトを作成

$ cargo new hello_cargo
     Created binary (application) `hello_cargo` package
$ tree -a .\hello_cargo\ -I .git
  ./hello_cargo
├──   .gitignore
├──   Cargo.toml
└──   src
   └──   main.rs

Cargoはsrcディレクトリ配下にソースコードがある想定で動く。

ビルド

デバッグビルド

$ cargo build
   Compiling hello_cargo v0.1.0 (C:\Users\syoum\work\sandbox\rust\thebook\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.24s

target/debug/hello_cargo.exeCargo.lockができる。

リリースビルド

--releaseフラグを付ける。

$ cargo build --release
   Compiling hello_cargo v0.1.0 (C:\Users\syoum\work\sandbox\rust\thebook\hello_cargo)
    Finished release [optimized] target(s) in 0.40s

最適化(optimized)され、デバッグ情報は含まれない。
target/release/hello_cargo.exeCargo.lockができる。

成果物作成やベンチマークをとる場合はリリースビルドを使おう。

ビルド&実行

$ cargo run
   Finished dev [unoptimized + debuginfo] target(s) in -1.01s
    Running `target\debug\hello_cargo.exe`
Hello, world!

cargo runは対象ファイルに変更がないとビルドをスキップする。
main.rsを変更してから実行すると、以下のようにリビルドされる。

$ cargo run
   Compiling hello_cargo v0.1.0 (C:\Users\syoum\work\sandbox\rust\thebook\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.37s
     Running `target\debug\hello_cargo.exe`
Hello, takuya!

コンパイルできるかのチェック

$ cargo check
    Checking hello_cargo v0.1.0 (C:\Users\syoum\work\sandbox\rust\thebook\hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.11s

cargo buildより高速なので、定期実行に適している。

🦉 TypeScriptとの比較。

Rust TypeScript
Cargo.toml package.json
Cargo.lock package-lock.json
target dist
cargo build tsc main.ts
cargo run node main.js
cargo check ???