Rust

ManuallyDrop::takeについて調べたのでまとめた (Rust)

はじめに MaybeUninitのassume_initメソッドについて調べたのでまとめたの内容と少し被っています。Rust 1.42でStabilized APIsになったManuallyDrop::takeについて調べたのでまとめました。 ManuallyDrop構造体 ManuallyDrop構造体はコンパイラに自動で値の…

MaybeUninitのassume_initメソッドについて調べたのでまとめた (Rust)

前に書いたMaybeUninitで初期化していない参照を扱う (Rust)で気になっていたassume_init()を調べたメモです。 気になっていた部分は下記です。 pub unsafe fn assume_init(self) -> T { intrinsics::panic_if_uninhabited::<T>(); ManuallyDrop::into_inner(se</t>…

MaybeUninitで初期化していない参照を扱う (Rust)

はじめに あるコードを見ていた時にstd::mem::uninitializedを見つけました。これはrustの1.39.0からDeprecatedとなっており、MaybeUninitに変わっていました。どうやって使うのかを調べたメモです。 内容はドキュメントに書いてあるものを少し噛み砕いてい…

Unsafeがよくわからなかったので整理した (Rust)

はじめに RustのThe Bookを読んでも、Unsafeについて何となくもやっとしていたので書いて整理しました。整理したというのは私が何をわかっていて何をわかっていないかを何となくですが把握したということです。 例えば、The Bookには以下のようなことが書い…

mkfifoでプロセス間通信を試す (Rust)

はじめに mkfifoという名前付きパイプを作成するシステムコール(を実行する関数)を試しました。名前付きパイプはプロセス間通信の手段の1つです。 例えばcat file | grep hogeで使うのは名前無しパイプの方です。名前付きパイプではファイルを作成してそれ…

マクロに入門したので概要を書く (Rust)

はじめに Rustのマクロは難しそうなので、必要な時に理解すればいいやと後回しにしていました。結局理解できていませんが徐々に攻めていこうと思います。 マクロの文法の説明はしません。また、マクロの展開に関わる抽象構文木の話は別の記事で書きます。 マ…

nixでプロセスをforkしてみる (Rust)

はじめに Rustでシステムプログラミングに入門中です。 プロセスのforkには、Rustからlibcを呼べるlibcというunsafeなライブラリと、それsafeにしたnixというものが使えるようです。unsafeは扱いにくいのでnixを使いました。 Cargo.toml [dependencies] nix …

jsonをファイルから読み込みたい (Rust)

はじめに 小小ネタです。 Rustを学びつつ次の技術書典のネタを作るためにjsonの読み込みが必要でした。 なのでRustでjsonの読み込み方法を調べました。 RustのGetting Startedをやったくらいの初学者向けを想定して書きます。 serde jsonの読み込みにはserde…