Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
なぜRustか?
Search
Ryosuke Kamesawa
September 30, 2020
Programming
94
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
なぜRustか?
なぜRustを使うのか、他の言語と何が違うのかなどについて話します。
Ryosuke Kamesawa
September 30, 2020
More Decks by Ryosuke Kamesawa
See All by Ryosuke Kamesawa
推論エンジンMAXの紹介
emakryo
1
660
ニューラルネットワークの量子化手法の紹介
emakryo
3
3.8k
MediaPipeの紹介
emakryo
0
130
Customizing Cargo for Cross Compiling
emakryo
0
60
Feature Store in DRIVE CHART
emakryo
0
110
Feature StoreをRustで実装した話
emakryo
0
68
rustdef: Rust on Jupyter Notebook
emakryo
0
81
Cargo-makeを使ってみた
emakryo
0
620
Machine Learning on Graph Data @ICML2019
emakryo
0
70
Other Decks in Programming
See All in Programming
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
480
Verilogで学ぶCPU自作入門
uyuki234
8
4k
contenteditable と日本語入力に向き合う
colorful12
0
180
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
140
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
560
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
170
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
940
気持ちぃ〜角丸 Squircle
ryu1013
0
140
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
AIに “答え“を書かせるのを やめてみた
___akari11
0
110
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
470
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
The Cult of Friendly URLs
andyhume
79
7k
Side Projects
sachag
456
43k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
Utilizing Notion as your number one productivity tool
mfonobong
4
610
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Chasing Engaging Ingredients in Design
codingconduct
0
350
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
RailsConf 2023
tenderlove
30
1.6k
Transcript
なぜ か? 技術開発部
亀澤諒亮(かめさわりょうすけ) 技術開発部 のエッジ 歴 年ぐらい、業務で使い始めて 年 最近作ったもの 上で を実行 自己紹介
🤔
日本語で本が出た がスポンサー で「最も愛されている言語」に が の が公開 が から へ 大手企業での採用事例
最近よく聞くような・・・ [1] https://aws.amazon.com/jp/blogs/opensource/aws-sponsorship-of-the-rust-project/ [2] https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved [3] https://blogs.windows.com/windowsdeveloper/2020/04/30/rust-winrt-public-preview/ [4] https://github.com/denoland/deno/issues/205
でもなんで?
速さ 安全さ モダンさ が好まれる理由 「最も愛されている」(使い続けたい)言語ランキング上位 https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved
とにかく速い 速さ https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html
のセキュリティバグの がメモリの安全性に起因 うち が解放済みメモリの参照によるもの メモリ安全性やスレッド安全性が コンパイラによって担保 で見られる次のような問題は起きない 未初期化メモリ、解放済みメモリの参照 ぶら下がりポインタ メモリの二重解放
スレッド間でのデータ競合 安全さ
関数型言語に由来する機能 パターンマッチ 代数的データ型 型推論 によるポリモーフィズム 非同期プログラミング イテレーター、無名関数 標準のビルドツールとパッケージマネージャー モダンさ
どこから始める?
書籍 「実践 入門 言語仕様から開発手法まで 」(自転車本) 「実践 プログラミング入門」(歯車本) サイト 本家 日本語訳
でもなんか難しそう…
所有権 借用(参照ルール) ライフタイム 他のメジャーな言語にない概念なので最初は難しく感じて当たり前 速さと安全性の両立に必要 速さ ガベージコレクタがない 安全性 手動でのメモリ管理をさせない 慣れると難しくはない
逆に他言語にも欲しくなる に特徴的な概念
所有権
変数と値と束縛 所有権 "value" variable 変数 値 束縛 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ee469b60af86158f3b6b7f5d61e6958f
「あとで使うから取っておこう」 所有権 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=77393648f189b058f2848df31c444199
🤔 所有権
所有権 "value" variable
所有権 "value" variable new_var
所有権 "value" variable new_var
所有権「常に値に対して束縛する変数は1つ」 所有権 "value" variable new_var
これは 所有権 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=15cd88d989ac1a54a79cfaeba17df69d
所有権 "value" variable new_var "value" .clone()
関数の引数にした場合、その関数内に所有権が渡る (明示的に返り値にしないと戻らない) 所有権 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e4abc5375f76fe804d8b1d02d394ade9
所有権「値に対して束縛する変数は1つ」 なぜこのルールが必要なのか? 「デストラクタが呼ばれる(メモリが解放される)ことを保証するため」 ガベコレがないので変数がスコープを外れると自動的に破棄される 複数の束縛があると破棄できるかどうかの判断が難しい でもこれだと流石に不便なのでは??? 参照(借用) 所有権 * 参照カウンタの仕組みもあるが、実行時にオーバーヘッドが生じる
参照とそのルール
束縛と参照 参照 と借用 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c56768c9c70f5d8d0791d16adf64c05f "value" variable 束縛 reference 参照
参照を引数にとる関数はその値(の所有権)を「借用」する → 借用なので呼び出し元に返される! 参照 と借用 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=039f960ab7728f367ae3de18d085074b
デフォルトで不変、可変にするにはmut キーワードが必要 可変 と不変
参照でも区別される 可変 と不変 https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=2949d369ff998b4c038a03a41d28b1a6
不変参照は複数同時にとることができる 可変 と不変 "value" variable reference borrow()
可変参照は不変参照を含めて同時に1つしか取得できない 参照ルール(1) "value" variable reference mutate()
参照する値は有効でなければならない(どこかに束縛がないといけない) 参照ルール(2) https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=dd4ea8f4c7203c6b1b1cd72a9ac9c1a0 "value" reference
なぜ必要?? 可変参照は不変参照を含めて同時に1つしか取得できない 参照を取得した時点から値が意図せず変更されるのを防ぐため マルチスレッドによるデータ競合を防ぐため 参照する値はどこかに束縛がなければならない 所有権により「束縛がない」=「メモリ上に存在しない」 いずれも不正、もしくは意図しないメモリ操作を検出することが目的 参照ルール
学び方
の概念に慣れるのには時間が必要 最初は書いてすぐ動くことは稀 コンパイルエラーはプログラムが安全でないことのメッセージ 型の不一致 参照ルール ライフタイム制約 コンパイラは賢い 代表的なエラーは修正方法まで提案してくれる コンパイラに従うだけで安全なプログラムになる コンパイラとの「対話」で
は習得できる コンパイラと「対話」しよう
話題の言語 速さ 安全さ モダンさ 日本語 特徴的な概念 所有権 参照ルール まとめ
文章 画像等の内容の無断転載及び複製等の行為はご遠慮ください。