Slide 1

Slide 1 text

Rust tutorial for Pythonista
 @matsu7874
 2022.3.10 Start Python Club みんなのPython勉強会#79


Slide 2

Slide 2 text

自己紹介 ● 松本健太郎 (Kentaro MATSUMOTO) @matsu7874 ● ソフトウェアエンジニア@フォルシア株式会社 ○ Rustでインメモリデータベースを開発 ○ 技術広報・エンジニア採用 ● 興味 ○ Webアプリケーション ○ 技術広報・エンジニア採用 ○ 競技プログラミング ● #stapy で感想をツイートしてね! 2

Slide 3

Slide 3 text

目次 ● まずはRustを書いてみる。 ● Rustってどんな言語 ● 所有権(ownership) ● ライフタイム(生存期間, lifetime) ● パターンマッチ ● Cargo ● Python と Rust を使う ● 日本語のコミュニティ・資料など 3

Slide 4

Slide 4 text

Rust書いたことありますか? はい・いいえ 4

Slide 5

Slide 5 text

5 はじめてのRustプログラム 1. 「Rust Playground」と検索して https://play.rust-lang.org/ にアクセスしてください。 
 2. 下記のプログラムを入力して「RUN▶」を押してみましょう。 
 画面右側に「We love Python and Rust.」と表示されれば成功です。 


Slide 6

Slide 6 text

Rust書いたことありますか? はい・いいえ 6

Slide 7

Slide 7 text

7 環境構築 1. https://rustup.rs/ にアクセスしてください。 
 2. 環境に応じてインストールの案内が表示されます 
 a. Linux系の場合は下記のコマンドを実行するだけでインストール完了です。 


Slide 8

Slide 8 text

8 コンパイルして実行 (rustcの場合) 1. main.rs にプログラムを書く 
 2. rustc でコンパイルする 
 3. main.out を実行する 


Slide 9

Slide 9 text

9 コンパイルして実行 (cargoの場合) 1. cargo new で新しいプロジェクトを作成 
 2. main.rs にプログラムを書く 
 3. cargo runでコンパイル・実行 


Slide 10

Slide 10 text

10 Rustってどんな言語 6年連続開発者から愛されている言語 1位 
 https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-language-love-dread

Slide 11

Slide 11 text

11 Rustってどんな言語 高速で安全で生産性の高い言語 
 https://www.rust-lang.org/ja

Slide 12

Slide 12 text

12 Rustのパフォーマンス RustはC++と同程度に高速、Pythonの約30倍高速。 
 https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html

Slide 13

Slide 13 text

13 Rustの信頼性 型システムと所有権によるコンパイル時の検証 
 ● 安全ではないコードを無自覚にかけない仕組み 


Slide 14

Slide 14 text

14 Rustの生産性 ● ドキュメントの充実
 ● コンパイラのエラーメッセージが親切 
 ● 標準インストールのパッケージマネージャ・ビルドツール・フォーマッタ 
 ● ランゲージサーバ
 https://www.rust-lang.org/learn Python Rust package manager pip, poetry cargo language server Pylance rust-analyzer formatter autopep8, black rustfmt linter Pylint, flake8 clippy

Slide 15

Slide 15 text

15 所有権:Rustの信頼性の要 アイデア:所有権って概念を入れればGCを使わなくてもメモリ管理できるぞ! 
 
 


Slide 16

Slide 16 text

16 所有権:変数とメモリ上の値の対応関係 メモリ上の値は唯一の所有者と呼ばれる変数を持つ 
 所有者である変数がスコープから外れた時、メモリを開放して良い 
 
 x y vec![1,2,3] x vec![1,2,3]

Slide 17

Slide 17 text

17 ライフタイム:参照が安全に使える範囲 毎回所有権が移動してはプログラミングしにくい。一時的に所有権を借りる(参照)ことができる。 
 この参照を安全に利用できる期間がライフタイム(生存期間)と呼ばれるもの。 
 


Slide 18

Slide 18 text

18 しれっとヤバいコードを許さない

Slide 19

Slide 19 text

19 パターンマッチ: matchの腕 https://doc.rust-lang.org/rust-by-example/flow_control/match.html

Slide 20

Slide 20 text

20 パターンマッチ: 分割代入

Slide 21

Slide 21 text

21 パターンマッチ: if let は match の置き換え

Slide 22

Slide 22 text

22 パターンマッチ: while let は loop{match} の置き換え

Slide 23

Slide 23 text

23 Cargo: 標準のパッケージマネージャ ● 標準だからみんなこれを使っている 
 ● よく使うコマンド
 ○ cargo new: パッケージを新しく作る 
 ○ cargo check: コンパイルせずに文法や依存関係のチェックを行う 
 ○ cargo build: コンパイルする 
 ○ cargo run: 実行する 
 ○ cargo run --release: リリースビルド(高速)で実行する 
 ○ cargo fmt: コード整形(標準搭載なので悩まなくて良い) 
 ○ cargo clippy: linter、Rustっぽい書き方も教えてくれる。 


Slide 24

Slide 24 text

24 clippy https://rust-lang.github.io/rust-clippy/master/

Slide 25

Slide 25 text

25 Python と Rust を使う ● 既存資産使えます。 
 ○ PyO3という非常に簡単にバインディングを行えるライブラリがあります。 
 ○ https://github.com/PyO3/pyo3#using-rust-from-python 
 ● Pythonが強い領域でRustを使おうとしている人たちもいます。 
 ○ 速度の高みを目指す:高速な単語分割器 Vaporetto の技術解説 
 ■ https://tech.legalforce.co.jp/entry/2021/09/28/180844 
 ○ 日本語形態素解析器 Sudachi のRust実装 
 ■ https://github.com/WorksApplications/sudachi.rs 


Slide 26

Slide 26 text

26 日本語のコミュニティ ● rust-jp slack https://rust-jp.rs/ 
 
 ● イベント
 ○ Shinjuku.rs https://forcia.connpass.com/ 
 ○ Rust LT https://rust.connpass.com/ 
 ○ Rustオンラインもくもく会 https://rust-online.connpass.com/ 
 ○ Rust.Tokyo 年1回のカンファレンス https://rust.tokyo/ 


Slide 27

Slide 27 text

27 日本語のオンラインドキュメント ● Rustの日本語ドキュメント https://doc.rust-jp.rs/ 
 ● とほほのRust入門 https://www.tohoho-web.com/ex/rust.html 


Slide 28

Slide 28 text

28 日本語のおすすめ書籍 ● 実践Rust入門[言語仕様から開発手法まで] (2019/5/8) 
 ○ それまで雰囲気で書いていた部分が理解できました。 
 ● 実践Rustプログラミング入門 (2020/8/22) 
 ○ いろいろな題材をRustで書いてみる本です。共著者として参加。 
 ● コンセプトから理解するRust (2022/2/12) 
 ○ 比較的薄く、メモリレイアウトが理解しやすい。 


Slide 29

Slide 29 text

Rust も いいぞ! @matsu7874 29