SlideShare a Scribd company logo
1 of 18
Download to read offline
Rust、何もわからない...
#7
VecDeque再訪
誰ですか?
株式会社ペイルド
Chief Technology Officer
@IgnorantCoder
IgnorantCoder
Rust 1.68.0 is now available
● Mar. 9にRust 1.68.0がリリースされました
○ estieさんが来週3/22に勝手にパーティをされるそうです
● Release Note
○ マクロがstableになったよ
○ で するとUpdate crete.io indexが早くなるよ
○ の がstableに、あと からの変換が O(1) 保証されたよ
pin!
registries.cretes-io protocol = 'sparse'
VecDeque const fn new Vec
Rust 1.68.0 is now available
● Mar. 9にRust 1.68.0がリリースされました
○ estieさんが来週3/22に勝手にパーティをされるそうです
● Release Note
○ マクロがstableになったよ
○ で するとUpdate crete.io indexが早くなるよ
○ の がstableに、あと からの変換が O(1) 保証されたよ
pin!
registries.cretes-io protocol = 'sparse'
VecDeque const fn new Vec
VecDequeってなんだっけ?
RustにおけるSequencial collection
Vec スタック上で、中身をヒープにおきたくて動的配列を使いたければ、これを使ってね。
VecDeque 最初とか最後に効率的に要素追加できる両端キューを使いたければ、これを使ってね。
LinkedList 絶対に本当にどうしても双方向連結リストじゃないとだめなときは、これを使ってね。 ※
※ You are absolutely certain you really, truly, want a double linked list.
RustにおけるSequencial collection
※ You are absolutely certain you really, truly, want a double linked list.
Vec スタック上で、中身をヒープにおきたくて動的配列を使いたければ、これを使ってね。
VecDeque 最初とか最後に効率的に要素追加できる両端キューを使いたければ、これを使ってね。
LinkedList 絶対に本当にどうしても双方向連結リストじゃないとだめなときは、これを使ってね。 ※
Vec の大まかな構造
*v *v+1 *v+2 *v+3 *v+4
…
v
*v+(len-1) *v+len
…
v.push
…
v.pop
*v+(len-2)
v.pop_front
=remove(0)
…
Vec[i]
● 先頭ポインタ(&**self)から
● indexだけ進む
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L2698-L2705
*v *v+1 *v+2 *v+3 *v+4
…
*v+(len-1) *v+len
*v+(len-2)
Vec::push
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1836-L1847
…
● 先頭ポインタから
● lenだけ進んで
● 値を書き込み
● 長さを1伸ばす
Vec::pop
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1836-L1847
● 長さを1縮めて
● 先頭から長さ分先のポインタの値を返す
…
Vec の大まかな構造
*v *v+1 *v+2 *v+3 *v+4
…
v
*v+(len-1) *v+len
…
v.push
…
v.pop
*v+(len-2)
v.pop_front
=remove(0)
…
Vec の大まかな構造
*v *v+1 *v+2 *v+3 *v+4
…
v
*v+(len-1) *v+len
…
v.push
…
v.pop
*v+(len-2)
v.pop_front
=remove(0)
…
…
Vec::remove
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/vec/mod.rs#L1483-L1536
● 対象のポインタまでアクセスして
● それ以降の要素をすべて一つ手前にシフト
VecDeque の大まかな構造
head
*
v
+
l
e
n
VecDeque::pop_front
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/collections/vec_deque/mod.rs#L1566-L1592
head
*
v
+
l
e
n
● headを1つ次のポインタに移し替えて
● 長さを1減らして
● 元のheadの値を返す
VecDeque::push_front
https://github.com/rust-lang/rust/blob/e84e5ff04a647ce28540300244a26ba120642eea/library/alloc/src/collections/vec_deque/mod.rs#L1618-L1642
● headを一個手前にずらして
● 長さを1伸ばし
● headに書き込む
head
*
v
+
l
e
n
Thank you for listening!!!

More Related Content

What's hot

ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートSatoshi Kume
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないCarnot Inc.
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門Kyoko Kadowaki
 
インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介MicroAd, Inc.(Engineer)
 
4bit-CPU : TD4の解説
4bit-CPU : TD4の解説4bit-CPU : TD4の解説
4bit-CPU : TD4の解説Seong-Hun Choe
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
Fugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons LearnedFugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons LearnedRCCSRENKEI
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Inc.
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7Itsuki Kuroda
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろKazuma Mikami
 

What's hot (20)

ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデートChatGPT の現状理解と 2023年7月版 LLM情報アップデート
ChatGPT の現状理解と 2023年7月版 LLM情報アップデート
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Paxos
PaxosPaxos
Paxos
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くない
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介
 
4bit-CPU : TD4の解説
4bit-CPU : TD4の解説4bit-CPU : TD4の解説
4bit-CPU : TD4の解説
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Fugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons LearnedFugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons Learned
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
文字列検索のいろいろ
文字列検索のいろいろ文字列検索のいろいろ
文字列検索のいろいろ
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
【さくらのクラウド】DNSアプライアンス導入ガイド
【さくらのクラウド】DNSアプライアンス導入ガイド【さくらのクラウド】DNSアプライアンス導入ガイド
【さくらのクラウド】DNSアプライアンス導入ガイド
 

More from Yusuke Mori

4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-84年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8Yusuke Mori
 
Handii スタートアップエンジニア開発課題LT day2
Handii スタートアップエンジニア開発課題LT day2Handii スタートアップエンジニア開発課題LT day2
Handii スタートアップエンジニア開発課題LT day2Yusuke Mori
 
Rusotoからaws-sdk-rustへ
Rusotoからaws-sdk-rustへRusotoからaws-sdk-rustへ
Rusotoからaws-sdk-rustへYusuke Mori
 
Startup react lt
Startup react ltStartup react lt
Startup react ltYusuke Mori
 
Startup shikujiri LT
Startup shikujiri LTStartup shikujiri LT
Startup shikujiri LTYusuke Mori
 
useful library in rust@shitamachi.rs #2
useful library in rust@shitamachi.rs #2useful library in rust@shitamachi.rs #2
useful library in rust@shitamachi.rs #2Yusuke Mori
 
プログラミングLT 2019 Summer
プログラミングLT 2019 SummerプログラミングLT 2019 Summer
プログラミングLT 2019 SummerYusuke Mori
 

More from Yusuke Mori (7)

4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-84年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
 
Handii スタートアップエンジニア開発課題LT day2
Handii スタートアップエンジニア開発課題LT day2Handii スタートアップエンジニア開発課題LT day2
Handii スタートアップエンジニア開発課題LT day2
 
Rusotoからaws-sdk-rustへ
Rusotoからaws-sdk-rustへRusotoからaws-sdk-rustへ
Rusotoからaws-sdk-rustへ
 
Startup react lt
Startup react ltStartup react lt
Startup react lt
 
Startup shikujiri LT
Startup shikujiri LTStartup shikujiri LT
Startup shikujiri LT
 
useful library in rust@shitamachi.rs #2
useful library in rust@shitamachi.rs #2useful library in rust@shitamachi.rs #2
useful library in rust@shitamachi.rs #2
 
プログラミングLT 2019 Summer
プログラミングLT 2019 SummerプログラミングLT 2019 Summer
プログラミングLT 2019 Summer
 

Rust、何もわからない...#7 VecDeque再訪