<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: popzxc</title><link>https://news.ycombinator.com/user?id=popzxc</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 17 Sep 2026 12:16:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=popzxc" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by popzxc in "Claude Cowork and chat are now one Claude"]]></title><description><![CDATA[
<p>I guess this is a feature worth announcing</p>
]]></description><pubDate>Wed, 16 Sep 2026 17:05:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=49729916</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49729916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49729916</guid></item><item><title><![CDATA[Omarchy on Mac]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/omacom/omarchy-mac">https://github.com/omacom/omarchy-mac</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49729799">https://news.ycombinator.com/item?id=49729799</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 16 Sep 2026 16:56:12 +0000</pubDate><link>https://github.com/omacom/omarchy-mac</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49729799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49729799</guid></item><item><title><![CDATA[New comment by popzxc in "Small programming tricks"]]></title><description><![CDATA[
<p>I think it's a great way to stop understanding what's going on in your terminal.<p>IMHO the value of these nuggets is that you understand what you're doing and why; opening yourself to large amounts of non-default behavior likely will end up in a less than pleasant setup.<p>Not taking into account that different users might disagree on what is convenient and what is not, which is basically the point of making things configurable.</p>
]]></description><pubDate>Wed, 16 Sep 2026 16:43:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49729636</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49729636</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49729636</guid></item><item><title><![CDATA[Why building a Rust LSP is hard]]></title><description><![CDATA[
<p>Article URL: <a href="https://rust-glancer.github.io/blog/why-lsp-is-hard/">https://rust-glancer.github.io/blog/why-lsp-is-hard/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49726537">https://news.ycombinator.com/item?id=49726537</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 16 Sep 2026 13:15:40 +0000</pubDate><link>https://rust-glancer.github.io/blog/why-lsp-is-hard/</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49726537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49726537</guid></item><item><title><![CDATA[Show HN: Rust Glancer 0.2 – new Rust LSP server targeting <100mb idle RSS]]></title><description><![CDATA[
<p>This is a major update of functionality, mainly incorporating early feedback, including from HN. The LSP got Zed/nvim & Windows support, was optimized for Bevy, and got significant improvements of analysis quality, memory usage, and speed.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49525257">https://news.ycombinator.com/item?id=49525257</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 01 Sep 2026 17:43:35 +0000</pubDate><link>https://rust-glancer.github.io/blog/0-2-0/</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49525257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49525257</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>And regarding salsa+rocksdb, actually Alex Kladov advocated exactly for that in the post about Rust Glancer and rust-analyzer architecture: <a href="https://matklad.github.io/2026/08/21/rust-glancer.html" rel="nofollow">https://matklad.github.io/2026/08/21/rust-glancer.html</a><p>Though I believe it's more of a direction for rust-analyzer rather Rust Glancer, at least for now.</p>
]]></description><pubDate>Sun, 23 Aug 2026 06:21:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=49406452</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49406452</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49406452</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Well, it's hard to give a concise overview, but in short -- I use `wincode` for serde (without zero-copy deserialization though; I've tried zero-copy first with rkyv but it was not trivial at all so I abandoned this idea, plus FS does not dominate the costs so far anyway).<p>Data is written at the end of indexing phase, during write we hold a lock, and the codebase is aware that offloaded data can be corrupted/outdated (mostly relevant for cache).<p>Query processing works on top of transaction, and the transaction holds data loaded from files for the duration of the query, and frees once the query is dropped.<p>There is a ton of tricky parts there, but I guess that's the gist of it.<p>If you're interested, here are the relevant parts of the source code:
<a href="https://github.com/rust-glancer/rust-glancer/tree/main/crates/engine/package-store" rel="nofollow">https://github.com/rust-glancer/rust-glancer/tree/main/crate...</a>
<a href="https://github.com/rust-glancer/rust-glancer/tree/main/crates/engine/project/src/cache" rel="nofollow">https://github.com/rust-glancer/rust-glancer/tree/main/crate...</a>
<a href="https://github.com/rust-glancer/rust-glancer/blob/main/crates/engine/project/src/project/loading.rs" rel="nofollow">https://github.com/rust-glancer/rust-glancer/blob/main/crate...</a>
<a href="https://github.com/rust-glancer/rust-glancer/blob/main/crates/engine/project/src/project/txn.rs" rel="nofollow">https://github.com/rust-glancer/rust-glancer/blob/main/crate...</a></p>
]]></description><pubDate>Sun, 23 Aug 2026 06:20:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49406440</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49406440</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49406440</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>The exact shape is TBD (I target proc macros support for 0.3.0, whereas 0.2.0 will be about completeness/editors support), but in short -- I'm thinking about "plugin"/DSL architecture where proc macro _effects_ can be described beforehand and applied by the LSP without actual code execution. Executing proc macros is a lot of effort, but LSP mostly cares about the externally observable effects, which is a much smaller subset.</p>
]]></description><pubDate>Sun, 23 Aug 2026 03:55:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=49405931</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49405931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49405931</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>On the first question -- auto imports is an example of a "heavy" functionality since we indeed need to scan more than is imported in the project, which is why I'm still working on this to optimize properly (it's decently fast, but I want it to be faster before I'll enable it, since it's also something we want to see in completions, and completions must be _very_ fast). Still, we don't need "everything": we only need _reachable_ items in _direct_ dependencies; typically project has much less direct dependencies than transitive ones (e.g. 20 direct dependencies can fan out to 1000 transitive deps), and each dependency usually has less exported items than total amount of items. Finally, for that you only need semantic data (e.g. items) rather than bodies. So while it's a big task (though finding references is still significantly bigger and tougher, because that's where it gets to "it can be anywhere in reverse dependencies bodies), it's not "we need the whole world".<p>As for the size -- the Rust Glancer artifacts for Rust Glancer itself currently take 225mb. And that's proportial to the project size only, e.g. it doesn't grow over time on its own.</p>
]]></description><pubDate>Sun, 23 Aug 2026 03:46:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=49405900</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49405900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49405900</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Yup. Basically, I have been combining both a manager and IC role for years now, which certainly helps working with LLMs: I can "delegate", and I know when to "intervene". It certainly is a skill, but the issue with LLMs is the confident voice you hear at the end of the turn: "the task is done, all is good"; and given that LLMs tend to praise its own code and tend to avoid global architecture reworks (I guess it's a training artifact), you need to understand the situation and resist hearing "nah, the architecture is fine, the rework is too much of work" phrased very convincingly. It's kind of peer pressure combined with both authority and glazing, which is a weirdly deceptive (to the point of being manipulative) mix.<p>I certainly enjoy working with humans much more than working with LLMs. Working with humans is usually "how can we get this done together", while working with LLMs is pretty much is "how can I make this model do what I need", which is something I don't like. An personal persistent thought I have now is not to transfer my relationship with LLMs to my relationship with human beings, and I don't really like it.</p>
]]></description><pubDate>Sat, 22 Aug 2026 18:47:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=49402553</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49402553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49402553</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>> So you would essentially fully index only once per project, + whenever you upgrade dependencies or upgrade rustc?<p>This is when you do full reindexing.<p>> Is that only an incremental indexing with normally low RAM usage?<p>Yup, on save you only update the crates that were invalidated.</p>
]]></description><pubDate>Sat, 22 Aug 2026 18:03:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=49402143</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49402143</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49402143</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Exactly. You pay higher RAM usage price once, for 5-30 seconds at the very beginning of the project (or if you make changes that invalidate the dependency graph, which is rather rare).
In 95% of cases and 99.999% of idle time using the editor, you enjoy lower RAM usage.<p>And note that on dirty buffers Rust Glancer doesn't do reindexing at all: it reuses the last available analysis, plus it does syntax-based shallow overlay that is sufficient to be useful but doesn't necessarily detect semantic changes. It's a tradeoff, but this tradeoff makes Rust Glancer competitive in terms of latency with rust-analyzer without compromising RAM and while keeping your CPU cool.<p>> it completely reindexes the single file that’s saved<p>This is true, though I have to mention that change in the file might invalidate its reverse dependencies, which can make the partial analysis bigger than just one file/crate, but it's still very fast in practice.</p>
]]></description><pubDate>Sat, 22 Aug 2026 18:01:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=49402128</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49402128</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49402128</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>I would say that LLMs have really good understanding of LSPs, but they are not necessarily good at building them. Had I blindly followed the proposed flow, Rust Glancer wouldn't have reached a stage where it is at least remotely usable. At some point the size of the project becomes too big for LLM to fit in its context window, and with the tendence to add code rather than remove, the bloat can explode really quickly. At a pretty early stage, I did not catch a situation where LLM suggested an extremely stupid design (because I wasn't familiar with the scope enough at the moment), and it implemented a whole new parallel hierarchy of functionality that was already implemented but in a _slightly different_ form. When I realized it, it took nearly two weeks to unfuck the situation.<p>So all in all -- yeah, LLMs can be good _domain experts_ when you build an LSP, but a) I wouldn't trust them blindly, and b) the quality of code is still very much your responsibility.</p>
]]></description><pubDate>Sat, 22 Aug 2026 17:55:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=49402073</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49402073</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49402073</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Storing structures mmapp'd is actually very tricky. I have experimented with rkyv initially having this idea in mind, but gave up because the machinery just to power the archive types was causing complexity to explode. The thing with zero-deserialization frameworks is that they are very limited in what they can abstract away, and it gets ugly pretty quickly.<p>So I don't deny the idea, just stating that it's probably _significantly_ more complex to implement than it sounds.</p>
]]></description><pubDate>Sat, 22 Aug 2026 14:19:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=49400012</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49400012</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49400012</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>I will work on creating a more or less fair benchmark soon-ish, but right now the initial indexing typically consumes more RAM than rust analyzer does, but not awfully so.<p>The difference, however, is that with Rust Glancer you don’t need full reindexing often, so it probably compensates for that to a degree.</p>
]]></description><pubDate>Sat, 22 Aug 2026 09:31:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=49398054</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49398054</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49398054</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Coming in the next release (as well as nvim)!</p>
]]></description><pubDate>Sat, 22 Aug 2026 09:27:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=49398036</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49398036</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49398036</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>I’m not sure if RA intentionally uses storage space itself.<p>It can use storage when running build scripts/expanding proc macros, or when running flycheck diagnostics. In both cases, it’s because it runs cargo and it writes artifacts to the target dir. And if features do not align between “common” cargo commands and configuration rust analyzer has, it can lead to conflicts and even more increased storage size (because you end up having effectively 2 sets of artifacts).<p>But all of that does not apply to rust glances, since it does not build code for you (even cargo diagnostics are disabled by default).<p>Rust Glancer analysis artifacts are not that big (it’s basically stuff that would otherwise be loaded to memory), and Rust Glancer cleans garbage so that it does not accumulate over time, so it should be fine.</p>
]]></description><pubDate>Sat, 22 Aug 2026 07:43:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=49397544</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49397544</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49397544</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>It's explained in the blog post, but in short: rust-analyzer stores the data it needs in memory all the time, while Rust Glancer might consume more memory during indexing (because it's not lazy and does more indexing), but after that it only loads _necessary_ information for the duration of the query.<p>Several things here:
1. We don't need all the information (project can have 1000+ dependencies, while query might only care about the current open file), so the amount of information we load is smaller.
2. Most of the time IDE does not actually do any queries, so if you switch to browser/Slack, you don't pay the tax.
3. Since data is loaded to the disk, after initial indexing restarting no longer consumes that much ram, and you get reindexing for free.
4. Besides offloading, I implement quite a bit of memory optimizations (some of which are covered in docs: <a href="https://rust-glancer.github.io/docs/development/MEMORY.html" rel="nofollow">https://rust-glancer.github.io/docs/development/MEMORY.html</a> ), so it's a combination of factors.</p>
]]></description><pubDate>Sat, 22 Aug 2026 06:08:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=49397029</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49397029</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49397029</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Well, most of stuff is not really ambiguous: if you have a struct and found its inherent impl for it, then methods from this impl block are related to this structure. If `a` has type `Foo` and then you have `let b = a;`, then `b` has type `Foo` too.<p>With things like trait solving I am not reinventing the wheel, and use official tooling (Chalk). Even though now the new solver is recommended, Chalk still does its job and lets me not to worry about potentially the most complex part of the machinery.<p>In places that seem to be underdocumented, it's always possible to:
1) look into sysroot implementation for clues
2) look into compiler sources
3) hijack stuff from rust-analyzer<p>I am lucky to not be the first guy who does a Rust LSP, so it's not that fundamental of a research, and much more of just an implementation :)</p>
]]></description><pubDate>Sat, 22 Aug 2026 05:49:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=49396919</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49396919</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49396919</guid></item><item><title><![CDATA[New comment by popzxc in "Rust Glancer: Rust LSP using 100x less RAM"]]></title><description><![CDATA[
<p>Thanks for the coverage and kind words!
The title of the post is a bit more ambitious than what I am confident to guarantee, but I'll try my best to live up to it ^_^"<p>Some comments on the thoughts post<p>> I think that part can perhaps be made lazy (but not incremental!) with little overhead?<p>I am still thinking about making stuff lazy, since with non-incremental approach it can introduce more lags than would be perceived comfortable, but what I do right now is that I prioritize open buffers (so the stuff user needs gets processed faster), and everything else is indexed in background. I have some thoughts about lazy approach, but before I'll try them, I want to work on the quality of analysis first.<p>> Would be interesting to compare memory usage with Rust Rover. Net of the IDE GUI itself, I would expect RR to be more compact.<p>I've received a few comments about RR already, and, to be honest, I've never tried it (somehow I never got along with JetBrains IDEs) -- but will look into it.<p>> One potential approach here is to pull the Sorbet trick, where you don’t run meta programming at all, and instead have a plugin interface to “explain” the effects of what that would have done.<p>Funnily, that's exactly (well, mostly) the idea I have in mind and want to try out. Tentatively planned for Rust Glancer 0.3.0 (0.2.0 will be mostly about more complete indexing/functionality and editors support). In short, I don't want to have random code execution in the LSP itself (even diagnostics are disabled by default), but it's quite possible that we don't need that for proc macros.<p>> Try changing this option and see if it helps?<p>I have tried both editor and server watcher options, didn't really feel the difference, but can't say that I performed a high quality investigation. I certainly noticed that vs code is not very good at properly reporting external changes (it misses a lot of them), and the server watcher was tricky to get right (and yeah, it has quite a bit of platform-specific quirks; which is one of the reasons I don't feel comfortable providing a server for Windows yet -- I have no machine to test it).<p>> This still seems to me to be the lowest-hanging watermelon here — split the world into arcy-pointy incremental tip of the iceberg, and mostly read-only, on disk, compact, dark, moist breeding ground for supply chain attacks.<p>This would be awesome! And I'd be really happy to see that change making Rust Glancer redundant; while ability to experiment is cool, I think that unified tooling is ultimately better for the language.</p>
]]></description><pubDate>Sat, 22 Aug 2026 05:45:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=49396903</link><dc:creator>popzxc</dc:creator><comments>https://news.ycombinator.com/item?id=49396903</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49396903</guid></item></channel></rss>