右上➚

プログラミングに関するメモをのこしていきます

Rust

Rust で Unix のシグナルを channel 経由でキャッチする

Rust でシグナルハンドリングをする必要があったのですが,あまり自分の用途にあるライブラリがなかったので作りました. 僕が Windows のことをほとんどわからないので,Windows 未対応です. github.com docs.rs https://crates.io/crates/signal-notify g…

Rust でグラフ構造や木構造を作る

プログラムを書いていると何かしら木構造っぽいものやグラフっぽいものを作りたい場面が多々あると思います. Rust は所有権や Size の都合で,これらを作ろうと思うと地味にハマるのでまとめておきます. Rust で木構造 最も単純な木構造は Rust だと enum …

mio で echo サーバメモ

Rust の非同期 IO ライブラリのなかでももっとも低レベルなレイヤーを担っている mio を使ってecho サーバを書いた。 echo サーバばっかり書いているような気がするけど,echo サーバやっておくと簡単な割にライブラリの使い方とかがちゃんと分かる気がする…

Rust で Box に包まれた構造体の所有権分解

ちょっとはまったのでメモ struct A { foo: Vec<i32>, bar: Vec<bool>, } こんな構造体があったとする。 普通、A の所有権を分解して foo と bar にしたいときは fn xxx(x: A) -> (Vec<i32>, Vec<bool>) { let A { foo, bar } = x; (foo, bar) } とやれば良い(この例だともっと簡</bool></i32></bool></i32>…

Rust の Result と Iterator

Rust には失敗するかもしれない値を表す Result<T, E> という型があります。 std::result::Result そして iterate できることを表す Iterator という trait があります。 std::iter::Iterator また、Iterator trait は要素型を表す関連型を持ちます。例えば String</t,>…

値と参照について

「値」と「参照」という言葉があります。 このへんの言葉について、今の理解をまとめておこうと思います。 言葉の定義や理解が誤っている部分があればご指摘ください。 まず、前提として以下では、「値」ベースの言語として C, C++, Rust などを、「参照」ベ…

Rust のパーサコンビネータライブラリ combine を使う時の tips

Rust のパーサコンビネータライブラリの一つである Marwes/combine: A parser combinator library for Rust を使ってみています. 詳しい使い方はきちんとしたドキュメントがあるのでそちらを参照してください. ざっくりいうと Haskell の parsec: Monadic …

Rust における return文の LLVM IR 表現について

if 文が値を返す return 文を持つ 以上のような特徴を持つ言語はどういう感じでコンパイルされるのか知りたくて,Rust について調べてみました. Rust では以下の様なことが出来ます. fn f() { let x = if cond { return None; } else { 1 }; ... } Scala …