【勉強会】「Rust入門者向けハンズオン vol.4」 に参加

More than 1 year has passed since last update.


概要

「Rust入門者向けハンズオン vol.4」 に参加したので自分の知見確認用

そもそもRustに興味を持ったきっかけは、rebuildで取り上げられていたこと周りからもいい言語という話しを聞いたので興味があったので。


ハンズオン内容

キュレーター: @chikoski

赤いキツネのブラウザ会社から同業他社に転職された方


Rustハンズオン概要説明

RustはFirfoxで開発していた。

メモリリークをなくしたかったらしい。

Rustは型が厳しい。とにかく苦しむ。

メモリ所有権からメモリ解放まで結構苦しむ。

前半はレクチャー

後半は黙々会(用事があって黙々会は参加できなかった)


サンプルをみながらレクチャー

サンプル

サンプルをみながらレクチャー


以下話された内容をメモ(ハンズオンの内容の解説ではないです)

話している方 chikoskiさん(以下の主語は chikoskiさんです)

cargoはパッケージ管理システム

cargo runで実行される

mainから始まる c言語と同じ

変数宣言 letを使う

代入と束縛は違うらしい。

同じ関数を二回呼ぶとエラーになる

一度使うと消費されてもういなくなるらしい。

Rustの言語の思想として、コンパイル上でエラーを探してできる限り無くしたい。

rustの変数は書き換えることができない。

ヒューリスティックな部分を削るため。

mutの指定をしないと変更できない。

基本的にはイミュータブルなもの。

コンパイルエラーで出ているエラー番号の内容はコントリビュート募集中

アニメネタが多い

例: E0382

~/L/r/r/e/ownership ❯❯❯ cargo run

Compiling ownership v0.1.0 (file:///Users/k-nakayama/Local/rust_hands_on_vol4/rust-exercises/exercises/ownership)
error[E0382]: use of moved value: `text`

束縛について

メモリ上の値を「変数=メモリ上の値を示すポインタ」が束縛する

最後に明示した値がresultになる

returnつけても良い。Rubyに似ている

printlnはマクロになっている。関数ではない。

rustでは!がつくものがマクロ。

わけがわからない場合はcloneしとけば解決する場合が多い。

==ここまでで1〜4のセッション内容==

rustを使用している会社一覧: https://www.rust-lang.org/en-US/friends.html

npmではCの部分をパフォーマンス考慮してRustに変更した。

websiteはiframeが100個ぐらいあるのでレンダリングが多い(ソーシャルなリンク部分)

Rustはミドルウェアとか下に焦点を当てている

全文検索な部分を知人などはRustで書いている

その知人はC++よりもRustの方がいいコードが書けるといっていた。

所有権

同じファイルの中で変数を受け渡したりもできない。

==ここから5のセッション内容 ==

optionの型

RustのEnumはCのUnionみたいなもの。

someとnoneがある。

パターンマッチ

値がないときはnoneに入ってくる

エラーハンドリングは下記の内容が参考になる

https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/error-handling.html

下記の人が詳しく参考になる

https://qiita.com/tatsuya6502/items/cd41599291e2e5f38a4a

cargo rub -- [ファイル名] 

cat

match

? がつくとエラー時にアーリーリターンする。

コンビネーター:

unwrap包まれている値を取り出す。

jsのpromiseに慣れている人はコンビネーター使うといいかも

C,javaぽいのはアーリーリターンかな?

基本は関数の考え方、入れたら返すというが基本

エラーは後回し

Moziraの時もライフタイムがさっぱりわからなかった。

原理は簡単だが細かく考えていくとわからない

ライフタイム

値の解放を勝手にやる。

GCはない。

値を使わなくなるかどうかはSCOPEでわかる。

変数が死ぬから束縛されている値も死ぬ

参照先がなくなっていることに気づいてコンパイルエラーが起きる

ライフタイムパラメーター

<>

何に依存しているかをライフタイムで表す

freeしていいのかわかる、メモリリーク防げる

return を書かない場合は

hoge

hoge;

では返り値が違う

hoge;ではnullが帰る

コンパイラもrustなので読むといいかも

comitterのソースはやはり綺麗なので参考になる

==ここまでで7のセッション内容==


参加した感想

レクチャーだとわからないことが多かった。

(ハンズオンで使用された資料の内容で気になった点は別記事で書くかも。)

ただ、自分の場合はてスクリプト言語のみの経験しかないので脳の違う部分を使って面白かった。

今後も学習していこうと思う。