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ちょっと触ってみた
Search
Hiroaki Osawa
January 17, 2020
Programming
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rustちょっと触ってみた
Hiroaki Osawa
January 17, 2020
More Decks by Hiroaki Osawa
See All by Hiroaki Osawa
健康保険証がなくなるらしい!?
qwyng
0
1.1k
My Gems for AtCoder
qwyng
0
80
Benefits of contributing to OSS
qwyng
0
530
Elixirとパターンマッチ
qwyng
0
530
Other Decks in Programming
See All in Programming
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
500
霧の中の代数的エフェクト
funnyycat
1
400
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
210
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
140
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
540
1B+ /day規模のログを管理する技術
broadleaf
0
140
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
190
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.4k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.7k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Bash Introduction
62gerente
615
220k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
Un-Boring Meetings
codingconduct
0
350
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Ethics towards AI in product and experience design
skipperchong
2
330
The Curse of the Amulet
leimatthew05
2
13k
Transcript
Rust ちょっと触ってみた @Hiroaki Osawa
年末休みに Rust 書いてました https://github.com/QWYNG/github-issue
今⽇話すこと Rust つまづきポイント Rust のよかったところ まとめ
Rust つまづきポイント そもそもコンパイラ通すのが⼤変
所有権 変数の束縛には所有権をもたせるという特性がある。 let v = vec![1, 2, 3]; let v2
= v; println!("v[0] is: {}", v[0]); 所有権が v2 に移⾏しているためヒープ上の 1, 2, 3 という実データに対して v も v2 も参照し ている状態は Rust 的に OUT
⽂字列型の種類が複数 いわゆる⽂字列には、メモリ⻑が決定されている組み込みの str と、メモリ⻑が固定さ れていない標準ライブラリにある String 型がある。 String 型はヒープ(スレッド間で共有できるメモリ領域)に格納可変。 str
の実データは作成⽅法によって異なる。 実際にコード内で "string" のように書くと静的領域に実データのある &str 型になるので Github からのレスポンスを String として扱う時に⾊々変換しなくてはならない。
Rust のよかったところ
パターンマッチ 最⾼ of 最⾼
Result 型と Option 型 多くの関数がこの 2 つのうちどちらかを返すことが多い。 Option は None
もしくは Some(値)を返すという型。 None は null のようなもの。 返り値書くときには Some(1) や None という書き⽅をする。 Result 例えば run みたいな関数があったとして pub fn run(args: Vec<String>) -> Result<i32, Box<dyn Error>> ようにエラーを返すかもしれないことを明記できる型。 返り値書くときには Ok(1) や Err(ParseError) という書き⽅をする。 これらの型で返された値を実際の値として扱うには unwrap() をするか、 process(args)? のように末尾に ? 演算⼦をつけて例外や None が出たら関数全体としてエ ラーや None を返すということを明⽰する必要がある。
Result 型と Option 型 コードを読む側、使う側として この 2 つの型はとても便利。 エラーを?でキャッチできるしこの関数にエラー処理が任されているんだなというの がひと⽬で分かる。
慣れると余計なエラーや null の処理挟まなくて良くなるので便利そう。
クロスコンパイル 最終的に機械語になって⼈に配布できるというのが Ruby から⼊るとかなり画期的。 タグ付けしたら GithubAction で複数 OS に対してバイナリをビルドして zip
にして リリースできる。
cargo Elixir と同じで、ドキュメント⽣成やテストが⾔語に組み込まれているのもモダンな⾔語感が あってよかった。リンターもしっかり搭載。
ビルド通ったときの安⼼感 Rust でビルドできるということはメモリを贅沢につかってこそすれ危険に利⽤してない ことの証明 常にメモリのことを考えたコードが強制される
俺は今 Rust というかっこいい⾔語で開発しているという謎の興奮 これが 9 割
まとめ Rust 本当になにもわからん。でも実践 Rust ⼊⾨は良書です。