Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rustハンズオン@エウレカ社

Yuki Toyoda
July 16, 2021
10k

 Rustハンズオン@エウレカ社

エウレカ社にてRustのハンズオンを実施しました。

コード全体は下記で確認できます。
https://github.com/yuk1ty/rust-basic-handson

Yuki Toyoda

July 16, 2021
Tweet

Transcript

  1. Hello, I’m... Yuki Toyoda Software Engineer @ CyberAgent Dynalyst Next

    Experts in Rust @ CyberAgent 共著『実践Rustプログラミング入門』 Rust.Tokyo, RustFest Global オーガナイザ Contributor to rust-lang/rust, servo, etc @helloyuki_
  2. Next Experts について Next Experts 3つの役割 特定領域への貢献意欲や一定の実績を有し、将来的なDeveloper Expertsを目指すエンジ ニアのための活動支援制度。サイバーエージェントにはDeveloper Expertsと呼ばれる、

    特定の専門領域における社内・社外活動の支援制度が存在します。 各専門領域における高い専門性を身につける 対外活動を通して、各専門領域の発展に貢献 管轄や事業部の垣根を越え、担当領域のサポート
  3. Rust.Tokyo, RustFest Global オーガナイザ 日本初の Rust カンファレンス「Rust.Tokyo」や、グローバルな Rust カンファレン ス「RustFest

    Global」のオーガナイザも務めています。2021年9月18日に Rust.Tokyo は開催予定です。CfP も受付中ですので、ご興味がある方はぜひ、ご応募ください。 RustFest Global ミーティングの様子 Rust.Tokyo 2021 のロゴ
  4. 速度と安全性を両立した新しい言語 安全性面 平均してGo/Javaより速く、C/C++並のスピードが出る。 ゼロコスト抽象化により、あらゆるコードを静的に解決する。 GC やランタイムはなく、機械語を直接生成する。 DX と速度がトレードオフにならないエルゴノミックな文法。 速度面 GC

    はないが、メモリ安全である。 safe コードでは、実行時に未定義動作が発生しない保証がされる。 メモリ確保と解放をコンパイラが自動で検査する。 速度を出しつつ安全性を追求し、 従来存在したトレードオフを打破した言語
  5. よく見るプリミティブ型 (※これ以外にもあります。詳しくはドキュメントをご覧ください) i8, i16, i32, i64 u8, u16, u32, u64

    f32, f64 isize / usize bool &str, String 符号付き整数型。 浮動小数点数型。 CPU アーキテクチャごとにビット分のサイズを取る整数型。isize は符号付き。 ブール値。true または false をとる。 文字列を扱う際によく利用される型。後述。 符号なし整数型。
  6. String のメモリモデル stack heap t u t o r i

    a l 10 8 capacity capacity length buffer length ※ stack: いわゆるスタックメモリを指す。ローカル変数などが保存される領域。 ※ heap: いわゆるヒープメモリを指す。動的に確保される領域で、C では malloc によって確保される。
  7. &str のメモリモデル stack preallocated read-only memory t u t o

    r i a l 8 length buffer length ※ preallocated read-only memory: 機械語生成時にすでに確保済みのメモリ領域を指す。
  8. if 式を使って FizzBuzz を作ってみる 他の言語と同様に if キーワードが存在しま す。 if は

    なので、結果を変数に束縛できます。 セミコロンを文末につけると式になり、な い場合は文として解釈が行われます。 if 式がある関係で、三項演算子は Rust には ありません。 式
  9. 関数に切り出す fn 関数 セミコロンを書 かないと return 扱い と宣言すると を宣言できます。 関数名は

    snake_case です。 引数は「仮引数名: 型名」で定義できます。 返りの型は -> のあとに書きます。 return は基本は必要なく、 になります。
  10. Rust のエラーハンドリング: Result 型 Rust ではエラーハンドリングを Result 型で行います。 成功なら Ok

    、失敗なら Err が返ります。 パターンマッチなどを使って中身を取り出します。
  11. structopt の設定を行う #[derive(StructOpt)] は StructOpt トレイトを という意味です。 #[structopt(...)] は、今回は説明しませんが と呼ばれるマクロです。

    継承する 「手続きマクロ」 ※ はこのハンズオンでは紹介できませんが、他の言語で言うインタフェースのようなものです。 トレイト
  12. ここまでの実装 path を複数受け取れるよ う、Vec を使って修正しまし た。 受け取った path は for

    文でイ テレートされ、中身が取り出さ れるようになりました。 また、検索結果にファイル名を 含められるよう、引数の渡し方 を調整しました。