mox692 のブログ

妄想の書き留め場所.

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…

Roswellのinstall方法 on ubuntu

common lispでcliツールを作ろうと思い、実行ファイルを吐く機構が欲しくなった. 調べたらRoswellというツールで実行ファイルを作成できるみたいなので、install・使用法のメモ. install 基本的には公式の通り $ curl -L https://github.com/roswell/roswell…

型パラメタによる抽象化コードを書くのに気をつけること

自分用反省メモ。Rustを想定してたりしてる。 ・その型パラメタに具体的にどのような型が入るか想定できているか? ・その型パラメタには適切な境界が設定されてるか?境界設定が甘くて、ハンドルできないような型が含まれてしまっていないか? ・その型パラ…

ファイルシステムも単なるkey-valueストアにすぎない

最近この本をちまちま読んでいる. www.oreilly.co.jp databse internalsって本の邦訳なんだけど、これの前半がストレージエンジン*1の仕組みで使われているアルゴリズムの話になっている. どのようにストレージデバイスにデータを格納すれば読み出しや書き込…

stackエンジンの進化

こいつの内容. stackoverflow.com 確かになぜcpuレベルでstackのpushやpopのサポートがあるかってのは聞かれてみたらよく話からんってなる. 実際に昔のcpu向けのcompileではmovで引き数渡しの処理が行われていたみたい But Pentium-M introduced a "stack en…

ループアンローリングが面白かった

チューニング技法入門という資料を読んでいた 。 この手の最適化は大体処理系がやってくれる場合が多くて見えにくい。 いろんな手法の最適化テクニックが紹介してあったのだけど、特にループアンローリングっていう最適化が面白かったので、そのメモ。 これ…

RustのABIと共有ライブラリ

最近Rust言語の人気が上がってきてると思います。自分も最近Rustを触り始めて、その魅力に取り憑かれてる身のうちの1人です。 そんな中である時、「rustには安定したABIがありません。」というissueを見つけました。(きっかけははっきり覚えてませんが。) は…

x86エミュレータbochsとI/O port

x86エミュレータ、bochs について。 元々cpuエミュレータはQEMUくらいしか知らなかったけど、xv6のソースを呼んでる中でbochsという単語がたまに出てきて知った。 QEMUとbochsのwikiをみたけど、やっぱQEMUの方がエミュレートできるマシンが多いみたいで、ま…

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