Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rust tutorial for Pythonista
Search
Kentaro Matsumoto
March 10, 2022
Programming
2
1.1k
Rust tutorial for Pythonista
Start Python Club 20220310 Pythonistaに送るRust入門
Kentaro Matsumoto
March 10, 2022
Tweet
Share
More Decks by Kentaro Matsumoto
See All by Kentaro Matsumoto
Generate a rust client code by OpenAPI Generator
matsu7874
0
170
ざっと理解するRust 2024 Edition
matsu7874
0
180
プリントデバッグを失敗させないテクニック
matsu7874
0
180
社外を巻き込んだ勉強会を定期開催するコツ
matsu7874
0
150
actix-webを使った開発のハマリポイントを避けたい
matsu7874
0
910
our test strategy on actix-web app
matsu7874
0
1.3k
roadmap to rust 2024
matsu7874
0
1.9k
Mock testing with mockall
matsu7874
0
300
Write Postgres Extensions with Rust!
matsu7874
0
610
Other Decks in Programming
See All in Programming
Desafios e Lições Aprendidas na Migração de Monólitos para Microsserviços em Java
jessilyneh
2
130
最高の構文木の設計 2024年版
yui_knk
7
2.4k
Modular Monolith Go Server with GraphQL Federation + gRPC
110y
1
550
Web技術を駆使してユーザーの画面を「録画」する
yukukotani
13
6.2k
Rustではじめる負荷試験
skanehira
5
1.1k
ECMAScript仕様を読むのに必要な知識 - ダイジェスト版
syumai
4
2.5k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
5
510
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
370
Mastering AsyncSequence - 使う・作る・他のデザインパターン(クロージャ、Delegate など)から移行する
treastrain
3
1.3k
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
140
BQ+dbt+Lookerを用いた、月間800億件以上の広告リクエストに対するデータモデリング
hanon52_
4
990
Prompt Cachingは本当に効果的なのか検証してみた.pdf
ttnyt8701
0
250
Featured
See All Featured
Unsuck your backbone
ammeep
667
57k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
22
1.7k
BBQ
matthewcrist
83
9.1k
Building Applications with DynamoDB
mza
89
5.9k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
Designing Experiences People Love
moore
138
23k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.5k
Writing Fast Ruby
sferik
623
60k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Speed Design
sergeychernyshev
18
400
Embracing the Ebb and Flow
colly
83
4.4k
Automating Front-end Workflow
addyosmani
1365
200k
Transcript
Rust tutorial for Pythonista @matsu7874 2022.3.10 Start Python Club みんなのPython勉強会#79
自己紹介 • 松本健太郎 (Kentaro MATSUMOTO) @matsu7874 • ソフトウェアエンジニア@フォルシア株式会社 ◦ Rustでインメモリデータベースを開発
◦ 技術広報・エンジニア採用 • 興味 ◦ Webアプリケーション ◦ 技術広報・エンジニア採用 ◦ 競技プログラミング • #stapy で感想をツイートしてね! 2
目次 • まずはRustを書いてみる。 • Rustってどんな言語 • 所有権(ownership) • ライフタイム(生存期間, lifetime)
• パターンマッチ • Cargo • Python と Rust を使う • 日本語のコミュニティ・資料など 3
Rust書いたことありますか? はい・いいえ 4
5 はじめてのRustプログラム 1. 「Rust Playground」と検索して https://play.rust-lang.org/ にアクセスしてください。 2. 下記のプログラムを入力して「RUN▶」を押してみましょう。
画面右側に「We love Python and Rust.」と表示されれば成功です。
Rust書いたことありますか? はい・いいえ 6
7 環境構築 1. https://rustup.rs/ にアクセスしてください。 2. 環境に応じてインストールの案内が表示されます a.
Linux系の場合は下記のコマンドを実行するだけでインストール完了です。
8 コンパイルして実行 (rustcの場合) 1. main.rs にプログラムを書く 2. rustc でコンパイルする
3. main.out を実行する
9 コンパイルして実行 (cargoの場合) 1. cargo new で新しいプロジェクトを作成 2. main.rs
にプログラムを書く 3. cargo runでコンパイル・実行
10 Rustってどんな言語 6年連続開発者から愛されている言語 1位 https://insights.stackoverflow.com/survey/2021#most-loved-dreaded-and-wanted-language-love-dread
11 Rustってどんな言語 高速で安全で生産性の高い言語 https://www.rust-lang.org/ja
12 Rustのパフォーマンス RustはC++と同程度に高速、Pythonの約30倍高速。 https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html
13 Rustの信頼性 型システムと所有権によるコンパイル時の検証 • 安全ではないコードを無自覚にかけない仕組み
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
15 所有権:Rustの信頼性の要 アイデア:所有権って概念を入れればGCを使わなくてもメモリ管理できるぞ!
16 所有権:変数とメモリ上の値の対応関係 メモリ上の値は唯一の所有者と呼ばれる変数を持つ 所有者である変数がスコープから外れた時、メモリを開放して良い x y vec![1,2,3]
x vec![1,2,3]
17 ライフタイム:参照が安全に使える範囲 毎回所有権が移動してはプログラミングしにくい。一時的に所有権を借りる(参照)ことができる。 この参照を安全に利用できる期間がライフタイム(生存期間)と呼ばれるもの。
18 しれっとヤバいコードを許さない
19 パターンマッチ: matchの腕 https://doc.rust-lang.org/rust-by-example/flow_control/match.html
20 パターンマッチ: 分割代入
21 パターンマッチ: if let は match の置き換え
22 パターンマッチ: while let は loop{match} の置き換え
23 Cargo: 標準のパッケージマネージャ • 標準だからみんなこれを使っている • よく使うコマンド ◦ cargo
new: パッケージを新しく作る ◦ cargo check: コンパイルせずに文法や依存関係のチェックを行う ◦ cargo build: コンパイルする ◦ cargo run: 実行する ◦ cargo run --release: リリースビルド(高速)で実行する ◦ cargo fmt: コード整形(標準搭載なので悩まなくて良い) ◦ cargo clippy: linter、Rustっぽい書き方も教えてくれる。
24 clippy https://rust-lang.github.io/rust-clippy/master/
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
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/
27 日本語のオンラインドキュメント • Rustの日本語ドキュメント https://doc.rust-jp.rs/ • とほほのRust入門 https://www.tohoho-web.com/ex/rust.html
28 日本語のおすすめ書籍 • 実践Rust入門[言語仕様から開発手法まで] (2019/5/8) ◦ それまで雰囲気で書いていた部分が理解できました。 •
実践Rustプログラミング入門 (2020/8/22) ◦ いろいろな題材をRustで書いてみる本です。共著者として参加。 • コンセプトから理解するRust (2022/2/12) ◦ 比較的薄く、メモリレイアウトが理解しやすい。
Rust も いいぞ! @matsu7874 29