サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
おみそ汁
agtn.hatenablog.com
Rust でシグナルハンドリングをする必要があったのですが,あまり自分の用途にあるライブラリがなかったので作りました. 僕が Windows のことをほとんどわからないので,Windows 未対応です. github.com docs.rs https://crates.io/crates/signal-notify golang の signal.Notify に寄せた API になっていて,標準ライブラリの std::sync::mpsc::{Sender, Receiver} 経由でシグナルを待ち受けることができます. extern crate signal_notify; use signal_notify::{notify, Signal}; use std::sync::mpsc::Receiver; fn main() { let rx: Receiver<Signal> =
どうもこんにちは. 前回(HaskellのConcurrentについて調べてまとめる (IORef編) - プログラミングのメモ帳➚)の続きです. 今回はスレッド間協調のためにMVarを使う方法について調べたので, まとめたいと思います. MVar Haskellにかかわらず, 最近の並行処理はメッセージパッシングでやれみたいなのが流行ってますね (ScalaのAkkaやgolangのchanなど). MVarはHaskellにおける, 容量1のメッセージボックスのようなものです. MVarを使うことで, スレッド間でメッセージのやり取りを協調的に行うことができます. 複数のスレッドが1つのMVarに対して, メッセージを入れたり取り出したりすることでスレッド間協調を行います. 基本となるAPIはこのような感じ newEmptyMVar :: IO (MVar a) newMVar ::
まず結論 append しよう. bytes.Buffer はそんなに速くない. きっかけ こんな記事を見かけました. Goでは文字列連結はコストの高い操作 - Qiita buf += "abc" はコストが高いよーっていうお話ですね. これは golang にかぎらず, Javaとかでもよく話題になる一般的な問題だと思います. Java だと StringBuilder を使うのが良いとされていたと思いますが, golang だと解法がいくつかあるようです. そこで, 解法をそれぞれ紹介した後, ベンチマーク結果を載せてみたいと思います. 1. 普通に += まずは普通に += で連結していく方法です. func AddString(n int) string { base := "abc" buf := "" for i := 0; i < n; i++ { buf += base
プログラムを書いていると何かしら木構造っぽいものやグラフっぽいものを作りたい場面が多々あると思います. Rust は所有権や Size の都合で,これらを作ろうと思うと地味にハマるのでまとめておきます. Rust で木構造 最も単純な木構造は Rust だと enum Tree<T> { Leaf(T), Node(Box<Tree<T>>, Box<Tree<T>>), } といった形で表せます. Rust では明示的に boxing してあげないと再帰的なデータ構造は作れないのでちょっと複雑に見えるかもしれませんが,まぁ単純です. この木構造を書き換えたい場合は,ownership をとって書き換えた値を返すこともできますし,&mut Tree<T> をとって in-place に書き換えることもできます. fn inc(&mut self) { match *self { Tree:
このページを最初にブックマークしてみませんか?
『agtn.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く