Rust に付け焼き刃で入門する 1
数十分〜数時間で手っ取り早く掴む系
- A half-hour to learn Rust - fasterthanli.me
- 「Rust を書けるように」というよりかは、「Rust を読めるように」なる解説。"A half-hour" とあるが、30分では収まりきらない
- Rust入門 - とほほのWWW入門
- Rust ツアー - 目次
- A Tour of Go の Rust 版。ブラウザ上の playground で Rust を実行しながら進められる。上の2つよりかは詳しめ。後半部分は日本語未翻訳。
- What is Rust? · Learn With Jason
- ライブコーディング形式で教わる動画。といっても初歩の初歩だけで終わってしまう。
ざくっと見てみたところ、所有権・借用や、ライフタイムの扱いがややこしそうな印象。コンパイルエラーのメッセージが親切なのはとても嬉しい。Hello World を書こうとすると、いきなりマクロ println!
が出てきて「!」となる。
The Rust Programming Language
公式のこのドキュメントがまずはおすすめらしいので、以降はこれに沿って勉強してみる。TRPL あるいは the book と呼ばれているとのこと。
1. 事始め
事始め - The Rust Programming Language 日本語版
1.1. インストール
普段は Homebrew を使うことが多いが、今回はとりあえず公式にしたがってインストールする。
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
デフォルトのままで動いた。
$ rustup --version rustup 1.23.1 (3df2264a9 2020-11-30) info: This is the version for the rustup toolchain manager, not the rustc compiler. info: The currently active `rustc` version is `rustc 1.50.0 (cb75ad5db 2021-02-10)` $ rustc --version rustc 1.50.0 (cb75ad5db 2021-02-10) $ cargo --version cargo 1.50.0 (f04e7fab7 2021-02-04)
公式のパッケージマネージャー cargo
が一緒にインストールされるのも、楽でうれしい。
1.2. Hello, World!
hello_world/main.rs
に hello world を書く。VS Code にはデフォルトで Rust のシンタックスハイライトが入っているようだ。
rustc
でコンパイルしたら、実行ファイルのバイナリができた。
$ rustc main.rs $ file main main: Mach-O 64-bit executable x86_64 $ ./main Hello, world!
1.3 Hello, Cargo!
$ cargo new
プロジェクトの作成。Git リポジトリの作成までやってくれる$ cargo check
検証$ cargo build [--release]
ビルド$ cargo run
(ビルド+)実行
cargo
があるので、rustc
でコンパイルする機会はあまりなさそう?
2. 数当てゲームをプログラムする
数当てゲームをプログラムする - The Rust Programming Language 日本語版
VS Code で写経。そのままだとフォーマットや補完ができなかったので、拡張機能を入れた。
let
で変数の作成。immutable の方が無標になっているのはありがたい。
::new
行にある::
という記法は、new
がString
型の関連関数であることを表しています。
関連関数というのは聞き慣れない言葉。英語だと associated function。スタティックメソッドと同じようなものらしい。
io::stdin().read_line(&mut guess)
read_line
に、String
型の変数 guess
の参照を渡している。C 言語のポインタっぽい。可変であることが &mut
で明示的に示されている。
Result
型に関しては、列挙子はOk
かErr
です。
Haskell の Either
など、関数型でよくあるアレ。エラー処理が書きやすくなるのでありがたい。エラー処理が漏れていると、コンパイル時に検出できるのもうれしい。
0.3.14
という数字は、実際には^0.3.14
の省略記法で、これは、「バージョン0.3.14と互換性のある公開APIを持つ任意のバージョン」を意味します。
Cargo の依存の指定。実際に、手元の環境では 0.3.23
がインストールされた様子。ちなみに、クレート crate というのは木箱のことらしい。
次に、別の
use
行を追加しています:use rand::Rng
ですね。Rng
トレイトは乱数生成器が実装するメソッドを定義していて、 このトレイトがスコープにないと、メソッドを使用できないのです。
これはわかりにくい気がする。…が、試しに use rand::Rng
をコメントアウトしてビルドしてみたら、
help: the following trait is implemented but not in scope; perhaps add a `use` for it: | 4 | use crate::rand::Rng;
という親切なメッセージが出てきた。これだったら大丈夫そうだ。
match
式は、複数のアーム(腕)からできています。
パターンマッチ。
Rustでは、新しい値でguessの値を覆い隠す(shadow)ことが許されているのです。 この機能は、値を別の型に変換したいシチュエーションでよく使われます。
最初はこのシャドーイングの使いみちがわからなかったけど、そういうことか。immutable な変数が基本なので、混乱も起きなさそう。
loop
, continue
, break
については、特に変わったところはなし。
- 作者:Steve Klabnik,Carol Nichols
- 発売日: 2019/06/28
- メディア: 単行本