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の技術発表資料です
PRO
June 20, 2022
Programming
0
240
Rustは厳しいが役に立つ Part1「Rustの概要」
NearMeの技術発表資料です
PRO
June 20, 2022
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
3
250
ReactNative のアップグレード作業が (意外に)楽しかった話
nearme_tech
PRO
2
80
強化学習アルゴリズムPPOの改善案を考えてみた
nearme_tech
PRO
0
8
Apple Containerについて調べて触ってみた
nearme_tech
PRO
0
150
Rust 並列強化学習
nearme_tech
PRO
0
24
並列で⽣成AIにコーディングをやらせる
nearme_tech
PRO
1
150
希望休勤務を考慮したシフト作成
nearme_tech
PRO
0
40
Hub Labeling による高速経路探索
nearme_tech
PRO
0
100
Build an AI agent with Mastra
nearme_tech
PRO
0
84
Other Decks in Programming
See All in Programming
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.5k
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
440
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
250
AWS発のAIエディタKiroを使ってみた
iriikeita
1
190
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
290
print("Hello, World")
eddie
2
530
Improving my own Ruby thereafter
sisshiki1969
1
160
1から理解するWeb Push
dora1998
7
1.9k
rage against annotate_predecessor
junk0612
0
170
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.9k
Reading Rails 1.0 Source Code
okuramasafumi
0
250
Ruby Parser progress report 2025
yui_knk
1
460
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Being A Developer After 40
akosma
90
590k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Site-Speed That Sticks
csswizardry
10
820
Embracing the Ebb and Flow
colly
87
4.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Documentation Writing (for coders)
carmenintech
74
5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
4 Signs Your Business is Dying
shpigford
184
22k
Building Adaptive Systems
keathley
43
2.7k
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