Slide 1

Slide 1 text

Rust ちょっと触ってみた @Hiroaki Osawa

Slide 2

Slide 2 text

年末休みに Rust 書いてました https://github.com/QWYNG/github-issue

Slide 3

Slide 3 text

今⽇話すこと Rust つまづきポイント Rust のよかったところ まとめ

Slide 4

Slide 4 text

Rust つまづきポイント そもそもコンパイラ通すのが⼤変

Slide 5

Slide 5 text

所有権 変数の束縛には所有権をもたせるという特性がある。 let v = vec![1, 2, 3]; let v2 = v; println!("v[0] is: {}", v[0]); 所有権が v2 に移⾏しているためヒープ上の 1, 2, 3 という実データに対して v も v2 も参照し ている状態は Rust 的に OUT

Slide 6

Slide 6 text

⽂字列型の種類が複数 いわゆる⽂字列には、メモリ⻑が決定されている組み込みの str と、メモリ⻑が固定さ れていない標準ライブラリにある String 型がある。 String 型はヒープ(スレッド間で共有できるメモリ領域)に格納可変。 str の実データは作成⽅法によって異なる。 実際にコード内で "string" のように書くと静的領域に実データのある &str 型になるので Github からのレスポンスを String として扱う時に⾊々変換しなくてはならない。

Slide 7

Slide 7 text

Rust のよかったところ

Slide 8

Slide 8 text

パターンマッチ 最⾼ of 最⾼

Slide 9

Slide 9 text

Result 型と Option 型 多くの関数がこの 2 つのうちどちらかを返すことが多い。 Option は None もしくは Some(値)を返すという型。 None は null のようなもの。 返り値書くときには Some(1) や None という書き⽅をする。 Result 例えば run みたいな関数があったとして pub fn run(args: Vec) -> Result> ようにエラーを返すかもしれないことを明記できる型。 返り値書くときには Ok(1) や Err(ParseError) という書き⽅をする。 これらの型で返された値を実際の値として扱うには unwrap() をするか、 process(args)? のように末尾に ? 演算⼦をつけて例外や None が出たら関数全体としてエ ラーや None を返すということを明⽰する必要がある。

Slide 10

Slide 10 text

Result 型と Option 型 コードを読む側、使う側として この 2 つの型はとても便利。 エラーを?でキャッチできるしこの関数にエラー処理が任されているんだなというの がひと⽬で分かる。 慣れると余計なエラーや null の処理挟まなくて良くなるので便利そう。

Slide 11

Slide 11 text

クロスコンパイル 最終的に機械語になって⼈に配布できるというのが Ruby から⼊るとかなり画期的。 タグ付けしたら GithubAction で複数 OS に対してバイナリをビルドして zip にして リリースできる。

Slide 12

Slide 12 text

cargo Elixir と同じで、ドキュメント⽣成やテストが⾔語に組み込まれているのもモダンな⾔語感が あってよかった。リンターもしっかり搭載。

Slide 13

Slide 13 text

ビルド通ったときの安⼼感 Rust でビルドできるということはメモリを贅沢につかってこそすれ危険に利⽤してない ことの証明 常にメモリのことを考えたコードが強制される

Slide 14

Slide 14 text

俺は今 Rust というかっこいい⾔語で開発しているという謎の興奮 これが 9 割

Slide 15

Slide 15 text

まとめ Rust 本当になにもわからん。でも実践 Rust ⼊⾨は良書です。