mox692 のブログ

妄想の書き留め場所.

2022-05-01から1ヶ月間の記事一覧

RustのOption::take()

too many linked list っていうRustで書きづらいようなデータ構造を頑張って書いて行こうぜみたいなblog postを最近読んでいた. その中ででてきて面白かったのが Option::take() という関数. /// Takes the value out of the option, leaving a [`None`] in …

Rustお勉強メモ

copy, cloneあたりの記事を読んで、そのメモ 意外と基礎が抜けていたり. Moveについて moveは基本 shallow copy. objectごとにcopyしたりはしない Copyについて コンパイラによって自動的に実装される. stack上にcopyが置かれる heapを指している(ものを含ん…

RustでImmutable Stackを使おうとした際に遭遇した難しさ

最近下記の記事を読んで、Immutable Stackなるものを知った. qiita.com この記事の本質はArc/Rcの仕組みを紐解くところあるのだけれど、Immutable Stackの概念が妙に新鮮かつ(状態を持たずにstackを実現している部分が)とても美しいと思った. この記事を参考…

Rustのちょっとわかりづらいmove error

突然ですが、 struct A {} impl A { fn foo(self) -> Self{ Self{} } } struct B { a: A } impl B { fn new(a:A) ->Self { Self {a: a} } fn baz(&self) { let _ = self.a.foo(); } } このコードは L15で次のようなコンパイルエラーを吐きます. cannot move …

(自戒) Vecの不用意なindexアクセスでcloneを呼ばないようにしようね

どうも、最近RustのCloneの使用を極力減らしていきたい症候群に駆られてるmox692です. 内容はタイトルのままです. Rustを触り始めて間もない頃はVecに対して安易に↓のようなコードを書きがちじゃないでしょうか. #[derive(Clone, Copy)] struct A{} fn main(…

これを理解すればRust中級者を名乗れるのでは?的なTraitたち

「Rustのコードを読んでいるとたまに出会うけど、直接今書いてるコードとは関係ないしまあ理解は後回しでいいか...」的な感じで、自分の中で理解を後回しにしていた概念(主にTrait)達を少しまとめようと思う. std::borrow::Borrow std::borrow::Cow std::bor…

rustのthread::spawn

rustのthread生成関数、std::thread::spawn()にて、docコメントに以下の記述があった. /// In terms of [atomic memory orderings], the completion of the associated /// thread synchronizes with this function returning. In other words, all /// oper…

/* -----codeの行番号----- */