SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
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!!!

Weitere ähnliche Inhalte

Was ist angesagt?

Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
数式を(ちょっとしか)使わずに隠れマルコフモデル
数式を(ちょっとしか)使わずに隠れマルコフモデル数式を(ちょっとしか)使わずに隠れマルコフモデル
数式を(ちょっとしか)使わずに隠れマルコフモデルYuya Takashina
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 

Was ist angesagt? (20)

Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
数式を(ちょっとしか)使わずに隠れマルコフモデル
数式を(ちょっとしか)使わずに隠れマルコフモデル数式を(ちょっとしか)使わずに隠れマルコフモデル
数式を(ちょっとしか)使わずに隠れマルコフモデル
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
RISC-Vの可能性
RISC-Vの可能性RISC-Vの可能性
RISC-Vの可能性
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 

Mehr von 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
 

Mehr von 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再訪