SlideShare a Scribd company logo
9
Most read
16
Most read
17
Most read
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

PDF
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
PDF
例外設計における大罪
PDF
ネットワークでなぜ遅延が生じるのか
PDF
LinuxのFull ticklessを試してみた
PDF
CVE、JVN番号の取得経験者になろう!
PDF
プログラムを高速化する話
PDF
TLS, HTTP/2演習
PDF
SpectreとMeltdown:最近のCPUの深い話
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
例外設計における大罪
ネットワークでなぜ遅延が生じるのか
LinuxのFull ticklessを試してみた
CVE、JVN番号の取得経験者になろう!
プログラムを高速化する話
TLS, HTTP/2演習
SpectreとMeltdown:最近のCPUの深い話

What's hot (20)

PDF
IT系エンジニアのためのプレゼンテーション入門
PDF
NAND Flash から InnoDB にかけての話(仮)
PDF
ELFの動的リンク
PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
PDF
SQL大量発行処理をいかにして高速化するか
PDF
OPC UAをオープンソースやフリーのソフトで遊んでみた
PPTX
ZDD基礎
PPTX
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PPTX
std::pin の勘所
PDF
ITエンジニアのための英語勉強法
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
できる!並列・並行プログラミング
PDF
CMSでのXSS to RCEを触ってみた
PDF
Pythonはどうやってlen関数で長さを手にいれているの?
PDF
僕がつくった 70個のうちの48個のWebサービス達
PPTX
ポーカーAIの最新動向 20171031
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
さいきんの InnoDB Adaptive Flushing (仮)
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
コンセプトから理解するGitコマンド
IT系エンジニアのためのプレゼンテーション入門
NAND Flash から InnoDB にかけての話(仮)
ELFの動的リンク
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
SQL大量発行処理をいかにして高速化するか
OPC UAをオープンソースやフリーのソフトで遊んでみた
ZDD基礎
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
std::pin の勘所
ITエンジニアのための英語勉強法
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
できる!並列・並行プログラミング
CMSでのXSS to RCEを触ってみた
Pythonはどうやってlen関数で長さを手にいれているの?
僕がつくった 70個のうちの48個のWebサービス達
ポーカーAIの最新動向 20171031
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
さいきんの InnoDB Adaptive Flushing (仮)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
コンセプトから理解するGitコマンド
Ad

More from Yusuke Mori (7)

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

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