Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

2020-01-01から1年間の記事一覧

cargo test --jobs N -- --test-threads=M

redis-rs の cluster のテストが何度やっても通らなくてハマった。ただし、テスト名を指定して一個ずつであれば成功する。該当するテストは以下。 redis-rs/test_cluster.rs at bd8dc731ded564329d74717dfacc5cce748d891f · mitsuhiko/redis-rs · GitHub こ…

Haskellの古いmkSocketの引数のfamily

Linuxネットワークプログラミングの勉強をきちんとしましょうということなんだけど、とりあえず調べたことをメモっておく。 Haskell に mkSocket という関数がある。 https://hackage.haskell.org/package/network-3.1.2.0/docs/Network-Socket.html#v:mkSoc…

Rustでdocker build時に依存ライブラリの再ビルドを避ける

Rust で書かれたアプリをビルドするための docker image は以下で公開されている。 hub.docker.com しかし、ここに出ているように COPY . . なんてやっていると、 src/main.rs を触るだけで毎回 cargo install 時に依存するライブラリをすべてダウンロードし…

&Tがそのまま&dyn Traitとして使えるわけではない

トレイトオブジェクトを返す次の関数 f はコンパイルできる。 trait X {} fn f(x: &dyn X) -> &dyn X { x } ところが、次のように書くとコンパイルできない。 fn f<T: X + ?Sized>(x: &T) -> &dyn X { x } Compiling playground v0.0.1 (/playground) error[E0277]: the siz</t:>…

Rustの&mutのmoveとreborrow

&mut は Copy trait を 実装していない 。よって、こちらは実行できない。 fn main() { let x: &mut i32 = &mut 0; { let y = x; println!("y: {}", y); } println!("x: {}", x); } Compiling playground v0.0.1 (/playground) error[E0382]: borrow of move…

Surface Book 3を手にするまでの2ヶ月の苦闘の記録

Surface Book 2 を買ってから 2年半が経過し、今回 Surface Book 3 を購入した。日本でも販売されることを知らずに US のマイクロソフトストアで購入したのだが、今回実機を手にするまでにめちゃめちゃ苦労したので、記録を残しておく。 US キーボードが欲し…

FutureとUnpin

Future で Unpin が必要なときは pin してねって書いてある。 Pinning - Asynchronous Programming in Rust To use a Future or Stream that isn't Unpin with a function that requires Unpin types, you'll first have to pin the value Box も Unpin なの…

AVL木

確か、いい感じに深くなりすぎない木だよね。回転?なにそれ?みたいな状態から実装し始めたら、面倒で死ぬかと思った。 AVL Tree by Java -- これで分かったAVL木 とか AVL木の回転(要素の挿入や削除のしかた) - Qiita とかを参考に実装した。2週間くらい…

rustでdiscordのbotを作ってみたくて下調べ(4)

rustでdiscordのbotを作ってみたくて下調べ(3) - 北海道苫小牧市出身の初老PGが書くブログ で serenity を紹介したが、最近 async版 の開発が進んでいる。試してみたが、まともに動くようだ。ベンチマークなど取っていないので、 async にする価値があるのか…

doesn't have a size known at compile-time

まだ時間がなくて詳しくは調べてないけど、こういう書き方はできない。まあそうかなと思う。 use std::fmt::Display; struct S<T> (T); fn main() { let s: Box<S<dyn Display>> = Box::new(S("")); } Compiling playground v0.0.1 (/playground) error[E0277]: the size for v</s<dyn></t>…

impl Trait 型の値を再代入しようとしてハマった

impl トレイト名 は Rust で存在型を扱うのに使える 。しかし、以下はコンパイルが通らない。 use std::fmt::Display; fn f<T>(t: T) -> impl Display where T: Display, { t } fn main() { let mut s = f(""); s = f(s); } Compiling playground v0.0.1 (/play</t>…

標準入力の一行の上限は4,096バイト

標準入力の一行に大量の文字を食わせると、4,096バイトしか有効にならない。 $ perl -e 'print "x" x 5000, "\n" for 1 .. 2' | clip.exe $ perl -e 'print length <>, "\n" for 1 .. 3' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…

rustでdiscordのbotを作ってみたくて下調べ(3)

前回からだいぶ時間が空いたが、下調べの続き。 discord-rs というのを最初に見つけて古いと嘆いていたのだが、現在使われているクレートは serenity の方だったようだ。これを検索で見つけるのは至難の業。 discord で検索すると、他の関係ないクレートがガ…

rustでdiscordのbotを作ってみたくて下調べ(2)

discord の bot を作るのなら websocket が必須なので下調べ。 というか、調べなくても discord-rs が使っていた websocket がそのまま使えるはずと思っていたのだが、開発が sluggish なので tokio-tungstenite を勧めている。良い名前空間を使っているだけ…

rustでdiscordのbotを作ってみたくて下調べ

結論から書くとまだ何もしてない。 discord-rs というのがあるのだけど、だいぶ古い。特に嫌なのが issue にも上がっている通り openssl 1.0 系への依存。 昨年末にEOLを迎えている ので避けておきたい。 という事で手元でバージョンを上げようと試みたのだ…