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は厳しいが役に立つ Part1「Rustの概要」
Search
NearMeの技術発表資料です
June 20, 2022
Programming
0
190
Rustは厳しいが役に立つ Part1「Rustの概要」
NearMeの技術発表資料です
June 20, 2022
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
第83回NearMe技術勉強会.pptx.pdf
nearme_tech
0
5
Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた
nearme_tech
0
27
ログ監視ツールについて調べてみた
nearme_tech
0
22
(インターン生が大学院で行なっている)研究紹介
nearme_tech
0
13
拡散モデルの概要 −§2. スコアベースモデルについて−
nearme_tech
0
33
jinja2を用いたログファイルの一覧化
nearme_tech
0
31
プログラミング言語を作る
nearme_tech
0
16
Bunファースト開発
nearme_tech
0
22
streamlitを使った数理最適化ダッシュボード
nearme_tech
0
65
Other Decks in Programming
See All in Programming
Learning PHP and Static Analysis with PHP Parser
inouehi
1
250
incrementalモデルの理解を深める
ikkimiyazaki
2
630
OpenTelemetry のサービスという概念について
azukiazusa1
1
380
OpenAPI を守るのは難しい
ohmori_yusuke
1
140
Compiling Python to WebAssembly with py2wasm
syrusakbary
0
130
まっちすいっち戦争 / match vs switch
takuyakatsusa
2
660
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
1.1k
チームでモデリングを育てるうえで 考えたこと・気づいたこと / Cultivating Modeling in Teams: Thoughts and Insights
mackey0225
5
1.7k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
memory1994
PRO
1
490
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
170
WinUI 3デモ - "CommunityToolkit.Mvvm"NuGetパッケージ編
andrewkeepcoding
0
130
Crafting a Own PHP - ウキウキ手作りミニマリストPHP
uzulla
4
1.1k
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
109
6.4k
A Philosophy of Restraint
colly
195
15k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Clear Off the Table
cherdarchuk
82
310k
GraphQLとの向き合い方2022年版
quramy
28
12k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
19
1.6k
Testing 201, or: Great Expectations
jmmastey
27
6.3k
Teambox: Starting and Learning
jrom
126
8.4k
Fireside Chat
paigeccino
19
2.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
350
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
343
19k
Transcript
0 Rustは厳しいが役に立つ Part1「Rustの概要」 2022-06-17 第2回NearMe技術勉強会 Kaito Asahi
1 目次 What is Rust? Rustの概要紹介 パフォーマンス Rustではどのようにしてパフォーマンス向上 をおこなうのでしょうか? 信頼性
変数の借用と参照についての概要 生産性 生産性を向上させる特徴についての概要
2 What is Rust? • 公式サイトより → 「効率的で信頼できるソフトウェアを誰もがつくれる言語」 • 細かい文法
→ 公式サイトで学びましょう。(手っ取り早くは...) → 私の会の2回目以降で、文法を随時扱います。 • Rustの3つの特徴 ◦ パフォーマンス ◦ 信頼性 ◦ 生産性 出典:https://rustacean.net/
3 パフォーマンス パフォーマンスのため”ランタイム”を軽量にしています。 • ガベージコレクション Garbage collectionがない → 直訳は「ゴミ拾い」 →
動的に確保したメモリ領域で、不要になったものを自動的に解放する → メモリが不要かどうかを実行時に探すため、パフォーマンスに影響する • 非同期処理にはライブラリが必要 → 様々な非同期ランタイムのライブラリが存在
4 パフォーマンス C++に匹敵するくらい高速です。 出典:https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html ‥
5 信頼性 豊富な型システムがあることも特徴的ですが、Rustでは以下の所有権の考え方がとても重要です。 • 所有権の規則(参考リンク) ◦ Rustの各値は、所有者と呼ばれる変数と対応している。 ◦ いかなる時も所有者は一つである。 ◦
所有者がスコープから外れたら、値は破棄される。
6 信頼性 -変数の所有者- スコープ内の変数は、スコープ外で利用することができません。 Ex) 変数 a に、数値を格納する(“{}”で囲まれた部分がスコープ) 1. 変数
a をスコープ内で定義する。 2. スコープ外で a を標準出力させようとするが、 エラーが発生した。 → a はスコープ内で定義されているので、 スコープ外で利用するとエラーが発生します。 ※ for ループや if 文でも、同じようにスコープの 概念があります。
7 信頼性 -変数の借用と参照- Heap領域を利用する変数の型には、変数の借用と参照の概念が必要です。 Ex) String型 • 文字列リテラルは、静的領域を利用 → 変数を他の変数に渡しても、借用には
ならないです。 • String型は、ヒープ領域を利用 → string2がstring1を借りているので、 string1は何も持っていない状態。
8 信頼性 -変数の借用と参照- 借用のエラーを回避するために... ↓ 参照をおこなう!!
9 信頼性 -変数の借用と参照- • 変数 string2 が string1 を参照 →
“&”を用いて、参照をおこないます。 • 参照自体は len や capacity の情報を もたない → 参照をしているだけであるので、実際に 参照されている変数が、詳細の情報をも ちます。 以下の参考リンクを元に作成 https://doc.rust-jp.rs/book-ja/ch04-02-references-and- borrowing.html
10 生産性 • エラーメッセージが比較的わかりやすい Ex) 所有権に関するエラーメッセージ • 様々なIDEでの自動補完やコンパイルチェックが豊富 → Visual
Studio Codeや、IntelliJ IDEAなどのIDEでのプラグインで、生産性が向上 (他の言語でもありますが...)
11 次回予定 RustとMongoDBを用いた、シンプルなアプリケーションの構築 (keyword = [“cargo”, “crate”, “MongoDB”, “ライフタイム”];)
12 Thank you