Rust
こういう文字列の末尾が共通となるようなRustのコードがある。 fn main() { print!("foobar\n"); print!("bar\n"); } こうなってしまう。 $ rustc hoge.rs $ readelf -p .rodata hoge| grep bar [ 0] invalid args/rustc/82e1608dfa6e0b5569232559e3d385fea5…
雑メモです。LLVMの実装追いきれてないからなんか間違ってたら、、スマンコ!w 前提 LLVMのインラインアセンブラはCodeGenの実体としてはnaked function相当。そのため、codegenには関数属性なんかを渡しているし、ジッサイこれが最適化に効いている! また…
Interface誌のRust特集で、espのstdをやっていくぜ!となったが悪戦苦闘している。 まずドライバを入れてWindows側でデバイスを認識するところからつまづいた。 Establish Serial Connection with ESP32 - ESP32 - — ESP-IDF Programming Guide latest docum…
GitHubでよくjemallocatorを使っているときにdisable_initial_exec_tls featureを有効にしているのをみかける。 これはなにかという話をする前に、TLSモデルについて知っておく必要がある。 TLSにはアクセスモデルというものがあり、モジュールの種類(実行バ…
posix_spawn/vfork/clone(CLONE_VFORK) はメモリを共有するので速い. 速いが、親子でメモリを共有するので危険である. それでも速いのでプロセス起動で気をつけて使っている言語があり、どういう実装をしているか調べた. 前提 fork-exec間はasync-singal-saf…
SpinLockのExponential Backoffアルゴルズムの実装を少し調べた. ParkingLot (WebKit,C++) https://webkit.org/blog/6161/locking-in-webkit/ という素晴らしいブログ記事で spinning という節で触れている. どうやら JikesRVM というJVM実装に由来するよう…
最近いじるときにどっかに情報まとめとくといいかな、と思い。他にもあれば是非教えてください。 gimli-rs/gimli - DWARFを扱うためのライブラリ。DWARFってだいたいでかいのでlazy, zero-copyで扱いやすいのは期待してる。 m4b/goblin - ELF/Mach-O/pe 形式…
現状ではnightlyでしか使えないが、Rustは部分的にコンパイル時に関数評価を定数畳み込みする const_fn という機能がある。 https://doc.rust-lang.org/beta/unstable-book/language-features/const-fn.html そこでコンパイル時にバイト列を比較するコードを…
こういうコードを書くと当然deadlockする。 use std::sync::{Mutex, Arc}; use std::thread; fn main() { let mut lock = Arc::new(Mutex::new(false)); let mut cloned_lock = lock.clone(); let th = thread::spawn(move|| { loop { let mut quit = cloned…
たまーに聞かれるので。うろ覚えで書いているので違ってたら直すのでこっそり教えてください。 Linux/macOS/FreeBSD/Windows rustup使いましょう。macOSでもhomebrew使うよりrustup使ったほうがいいと思います。.bashenvなり.zshenvなりに export PATH="$HOM…
cargo installで入れられそうなやつを雑にまとめてみた。 ripgrep(rg) - はやいgrep、あるいはag。 xsv - CSVツールキット。 alacritty - 速いらしいターミナルエミュレータ。 parallel - GNU parallelのRust版。 coreutils - GNU coreutilsのポート。使えな…
Rust Rust LT会で発表しました。最初スクリーン映らなくて焦った…進行の方にご迷惑おかけしたことをここでお詫びします。 qiita.com まあここに書いてることをまた書いてもあまり意味ないのでこぼれ話を。 取り上げてるmiocoは最近はあまり活発じゃないです…
Rustの非同期I/O隆盛の流れでtokioベースのmysql driverができたっぽい。(ほんとにできたばっかり) GitHub - blackbeam/mysql_async: Asyncronous Rust Mysql driver based on Tokio. 雑な説明だけれど一応書いておくと、非同期I/Oは一スレッドが捌くクライ…
無意味にマクロで。 macro_rules! fib { ( $n:expr ) => {{ let (mut x, mut y) = (1, 0); for _ in 0..$n { let tmp = box x; x += y; y = *tmp; } y }}; } fn main() { println!("{}", fib!(10)); } ( ՞ਊ ՞) :~/dev $ rustc --version # ちと古い rustc 1.…