SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
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!!!

Contenu connexe

Tendances

純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2Kyoko Kadowaki
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...ケンタ タナカ
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
「統計的学習理論」第1章
「統計的学習理論」第1章「統計的学習理論」第1章
「統計的学習理論」第1章Kota Matsui
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解するKenji Urushima
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方H Iseri
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜Megagon Labs
 
CRC-32
CRC-32CRC-32
CRC-327shi
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 

Tendances (20)

純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
π計算
π計算π計算
π計算
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
証明プログラミング入門2
証明プログラミング入門2証明プログラミング入門2
証明プログラミング入門2
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...
最高の統計ソフトウェアはどれか? "What’s the Best Statistical Software? A Comparison of R, Py...
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
「統計的学習理論」第1章
「統計的学習理論」第1章「統計的学習理論」第1章
「統計的学習理論」第1章
 
Bitcoinを技術的に理解する
Bitcoinを技術的に理解するBitcoinを技術的に理解する
Bitcoinを技術的に理解する
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
CRC-32
CRC-32CRC-32
CRC-32
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 

Plus de 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
 

Plus de 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再訪