Rust

ブラウザだけ1.5倍遅い — WebWorkerの setTimeout(0) が4msずつ止まっていた (JavaScript/WebAssembly)

自作x86エミュレータ rustx86 には、ずっと説明のつかない数字があった。同じwasmバイナリなのに、Node.js (headless) では14秒で終わるLinuxブートが、ブラウザだと21秒かかる。約×1.5。タブの描画やpos...
Rust

LLVMのPGOでRust製x86エミュレータが25%速くなった。それでも採用を見送った理由

自作x86エミュレータ rustx86 で、LLVMのPGO (Profile-Guided Optimization) を試したらネイティブ実行が約25%速くなった。交互A/B 5周全勝、意味論の後退なし。そして、採用を見送った。「効いた...
Rust

Rust+WebAssemblyのx86エミュレータにJITを育てる — 「1bitも変わらない」証明がバグを2匹仕留めた

ブラウザで32bit Linuxを起動する自作x86エミュレータ rustx86 に、テンプレートJITを育てている。前回はレジスタ間演算だけの骨格 (F1a) を通し、「JITを有効にしても命令数もシリアル出力もビット同一」を3つのISA...
AI

Claude Codeの権限設定でハマらないために — settings.jsonの適用範囲と、クレデンシャル漏洩をDenyで止める多層防御

Claude Code(AIコーディングエージェント)を実運用していると、必ず権限プロンプトにぶつかる。git status を打つたび、cargo build を走らせるたびに「実行していいですか?」と聞かれる。最初は安心だが、一日に何十...
16bit

Rust + WASM の x86 エミュレータで ELKS のテトリスが即ゲームオーバーになる — 犯人は HLT 早送りの時間会計だった

自作の x86 エミュレータ rustx86 (Rust + WebAssembly、ブラウザで 16bit UNIX や 32bit Linux が動く) で、ELKS 0.9.1 のテトリスを起動すると駒が一瞬で積み上がり、Bye! Y...
AI

M1 MacからWindowsとUbuntu VMをSSHで従える — インストーラ無しのクロスベンチ環境構築 (OpenSSH / MinGit / node.exe単体)

Rust製x86エミュレータ rustx86 のベンチマークを、M1 Mac・Windows実機・その上のUbuntu VMの3環境で横断的に取りたくなった。本編 (最適化戦記) で使った比較表の裏側 — M1 Macのターミナルから他の2...
AI

Rust自作x86エミュレータ最適化戦記 — QEMU式lazy flagsより「控えの薄切り」が効いた夜 (66→79 MIPS)

Rust製のx86エミュレータ rustx86 で、ブラウザ (WASM) でも動く32bit Linuxを起動している。前回までにフルブート10秒 (ネイティブ66 MIPS) まで来ていて、目標は100 MIPS。「エミュレータの速さは...
Rust

自作x86エミュレータ (Rust) のベンチマークが嘘をついていた — 固定3.7億命令のはずが200億命令走っていた話

自作のx86エミュレータには、開発初期から実行速度ベンチマークがある。命令数が固定のワークロードを流し、環境が変わってもMIPSを比較できるようにした自慢の仕組みだった。そのベンチが、ずっと別のものを測っていたことが今日わかった。UIの配色...
Rust

Rust自作x86エミュレータ、Linuxフルブート10秒への道 — デコードキャッシュとブロック連結で36→66 MIPS

Rustで依存ゼロのx86エミュレータを書いている。32bit Linux (Alpine 6.18) がブラウザ (WASM) でもネイティブでも起動するところまで来たが、問題は速度だった。シンプルなカーネルの起動に、ブラウザで2分半かか...
AI

Rust製x86エミュレータで本物のLinux 6.18を起動し、BusyBoxシェルでゲームを動かすまで

自作のx86エミュレータ rustx86 に、Alpine Linux の本物のカーネル (Linux 6.18) を食わせた。丸一日の格闘の末、start_kernel を完走し、ユーザー空間に降り、BusyBox のシェルに ~ # の...