Topic

Rust

2026-10-02 · notes
Sharing rust-analyzer across Git worktrees: in-memory overlay architecture and concurrency lessons
In a multi-agent coding fleet, running separate rust-analyzer instances for every Git worktree multiplies memory consumption. Here is how an in-memory VFS overlay shares a single analysis database across worktrees, the Salsa concurrency traps we encountered, and our proposal to upstream.
4 min
2026-09-30 · notes
The refactor no tool owns
Rename is everywhere; changing what a function takes is nowhere. Building it meant letting the declaration write the rule, checking the result against the analyzer's own reference list, and refusing to write anything that does not compile.
5 min
2026-09-30 · notes
204 Code Clones and Two Self-Loops: Dissecting Bevy's 97-Crate Engine with 67 AST Tools
We benchmarked all 67 prod-code AST tools against bevyengine/bevy: 661K lines of Rust, 97 crates, 204 exact code clones, 2 dev-dependency loops, and Bug #739 discovered and fixed in fast-sync.
9 min
2026-09-30 · notes
347 Code Clones and a Self-Loop: Breaking Down uv's 74-Crate Workspace with 67 AST Tools
We benchmarked all 67 prod-code AST tools against astral-sh/uv: 559K lines of Rust, 74 crates, 347 duplicated test clones, a self-referential cycle in uv-preview, and Issue #738 resolved in fast-sync.
10 min
2026-09-30 · design note
From 1,623 µs to 129 µs: zero-copy AVX-512 wire streaming
A 5.7 MB binary wire block stream took 73 milliseconds to parse with standard MessagePack deserialization, stalling the ingest thread during market bursts. How an AVX-512 scanner and fixed-point integers dropped per-block latency from 1,623 µs to 129 µs and brought throughput to 978 MB/s.
5 min
2026-09-30 · design note
Half a Million Lines of Arrow: What 67 AST Analyzers Found Inside Polars' Query Engine
We pointed all 67 tools of prod-code at pola-rs/polars on an idle 32-core cluster node. 526K lines of Rust across 33 crates, 4 circular DAG paths, catching a UTF-8 non-char-boundary tokenizer panic, in-memory RAM validation, and 36-test remote execution.
14 min
2026-09-29 · notes
Hover lies by omission
A struct with eleven fields shows ten, so any test value built from that answer is missing one and nothing says so until a build. What it takes to generate a fixture you can trust: read the declaration rather than the summary, and type-check the result before handing it over.
6 min
2026-09-29 · design note
7,156 Cyclic Module Paths: Stress-Testing Tantivy's Search Engine with 67 AST Tools
We subjected quickwit-oss/tantivy to all 67 prod-code tools on an idle 32-core cluster node. Full results across 7,156 module cycles, 18-file AST renames, clone detection in JIT expressions, and safe-delete invariants.
14 min
2026-09-29 · design note
Can 67 AST Tools Break Ripgrep? Stress-Testing Rust's Fastest Grep on an Idle Cluster Node
We pointed the full 67-tool matrix of prod-code at BurntSushi/ripgrep on an idle 32-core cluster node. Sub-millisecond sync, AST slicing, 30 refactorings, in-memory pre-flight validation, and resolving Issue #735.
21 min
2026-09-29 · design note
Six Circular Dependencies in Tokio: What 67 AST Analyzers Found Inside Rust's Async Engine
We pointed all 67 tools of prod-code at tokio-rs/tokio on an idle 32-core cluster node. From 6 circular crate cycles and silent Deref evaluation ordering traps to an unhandled sysroot crash on Box—here is what happened.
16 min
2026-09-28 · notes
The files are not the answer
An agent asked to change one function opens three files and spends most of its context on code that has nothing to do with the task. A slice is the other shape of the same question: the declarations the function depends on, and nothing that merely lives beside them.
6 min
2026-09-27 · notes
Both bugs said no matches
A structural rewrite that found nothing, twice, for two unrelated reasons in two different layers. What it takes to tell an empty answer from a broken one, and why the fix was tracing rather than thinking harder.
5 min
2026-09-24 · design note
One terminal engine for the server, the Mac and the phone
Prod keeps agents' terminals on a server and shows them on a Mac and an iPhone. Three emulators disagreed about the same bytes, so we replaced them with one Rust engine that moves its state instead of a picture of it.
10 min
2026-09-23 · design note
The analyzer already knows your patch is broken
An agent writes a file, runs a build, reads the errors and tries again. The database that answered its last hover could have told it in 100 ms, without writing anything. What that takes, and the one error class rust-analyzer stays silent about.
5 min
2026-09-21 · design note
Salsa has no branches
Two agents on two worktrees of one repository, sharing one analyzer database, answer each other's questions. A benchmark that forks four worktrees and asserts what each should see, and why we stopped trying to share anything writable.
5 min
2026-09-21 · design note
Your laptop is the wrong place for rust-analyzer
Ten coding agents in ten worktrees means ten analyzers and ten cargo builds on one machine. We moved the analyzer, the builds and the tests to Linux nodes on the LAN, mirror the checkout there by content hash, and let the laptop do the one thing it is good at: editing.
6 min
2026-09-16 · design note
rapidfire: the channel between a market feed and a decision
The hand-off between a market-data reader and a strategy loop is one of the few latencies in a trading process under our control. How we built a lock-free channel for it, what broke on a 128-core ARM box, and where the assembly landed.
6 min