<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: mullr</title><link>https://news.ycombinator.com/user?id=mullr</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 10 Apr 2026 08:29:28 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mullr" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mullr in "Hypothesis, Antithesis, Synthesis"]]></title><description><![CDATA[
<p>Why would I use this over the existing Proptest library in Rust?</p>
]]></description><pubDate>Tue, 24 Mar 2026 17:32:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47506286</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=47506286</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47506286</guid></item><item><title><![CDATA[New comment by mullr in "Ask HN: Good Books on the History of Technology?"]]></title><description><![CDATA[
<p>"The Lightning Tamers", by Kathy Joseph, is a wonderful and accessible book about the history of electricity. Her youtube channel is great too: <a href="https://www.youtube.com/c/KathyLovesPhysicsHistory">https://www.youtube.com/c/KathyLovesPhysicsHistory</a></p>
]]></description><pubDate>Wed, 05 Jul 2023 15:40:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=36601969</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=36601969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36601969</guid></item><item><title><![CDATA[New comment by mullr in "OpenBSD: Viogpu(4), a VirtIO GPU driver, added to -current"]]></title><description><![CDATA[
<p><a href="https://docs.oasis-open.org/virtio/virtio/v1.2/cs01/virtio-v1.2-cs01.html#x1-3650007" rel="nofollow">https://docs.oasis-open.org/virtio/virtio/v1.2/cs01/virtio-v...</a></p>
]]></description><pubDate>Fri, 21 Apr 2023 17:29:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=35657167</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=35657167</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35657167</guid></item><item><title><![CDATA[New comment by mullr in "Structuring Clojure applications"]]></title><description><![CDATA[
<p>I had the opposite experience. I worked for a company with a bunch of Clojure projects, written by people of varying levels of experience. I had to do some cross-cutting changes and feared the worst. But when I actually got down to it, everything more or less made sense.<p>Why did this happen?<p>- We had small common framework that everybody used, at the very highest level (think application lifecycle management). That imposed some amount of consistency at the most basic run-the-program stage.<p>- The devs communicated openly, a lot, so there was some general consensus on what to do, and what not to do.<p>- The team at large was very suspicious of introducing new macros. You could do it, but you'd better have a really good reason.<p>- When I went to make the changes, I didn't have to worry about spooky-action-at-a-distance kinds of consequences anywhere NEAR as much as I do in other languages. Being strict with your state management, as Clojure strongly encourages, REALLY pays off here.<p>The actual problems I had were entirely related to the overall build system, the fractured nature of the source control, and figuring out who was responsible for what code once we were 3 reorgs deep. The code itself was remarkably resilient to all this nonsense.</p>
]]></description><pubDate>Mon, 19 Dec 2022 19:53:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=34056779</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=34056779</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34056779</guid></item><item><title><![CDATA[New comment by mullr in "Data-driven performance optimization with Rust and Miri"]]></title><description><![CDATA[
<p>I've had no problems with dwarf.</p>
]]></description><pubDate>Fri, 09 Dec 2022 23:17:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=33927788</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=33927788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33927788</guid></item><item><title><![CDATA[New comment by mullr in "Data-driven performance optimization with Rust and Miri"]]></title><description><![CDATA[
<p>Every Linux C/C++/Rust developer should know about <a href="https://github.com/KDAB/hotspot" rel="nofollow">https://github.com/KDAB/hotspot</a>. It's convenient and fast. I use it for Rust all the time, and it provides all of these features on the back of regular old `perf`.</p>
]]></description><pubDate>Fri, 09 Dec 2022 17:50:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=33924266</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=33924266</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33924266</guid></item><item><title><![CDATA[New comment by mullr in "Chumsky, a Rust parser-combinator library with error recovery"]]></title><description><![CDATA[
<p>Caveats: I've used nom in anger, chumsky hardly at all, and tree-sitter only for prototyping. I'm using it for parsing a DSL, essentially a small programming language.<p>The essential difference between nom/chomsky and tree-sitter is that the former are libraries for constructing parsers out of smaller parsers, whereas tree-sitter takes a grammar specification and produces a parser. This may seem small at first, but is a massive difference in practice.<p>As far as ergonomics go, that's a rather subjective question. On the surface, the parser combinator libraries seem easier to use. They integrate well with the the host language, so you can stay in the same environment. But this comes with a caveat: parser combinators are a functional programming pattern, and Rust is only kind of a functional language, if you treat it juuuuust right. This will make itself known when your program isn't quite right; I've seen type errors that take up an entire terminal window or more. It's also very difficult to decompose a parser into functions. In the best case, you need to write your functions to be generic over type constraints that are subtle and hard to write. (again, if you get this wrong, the errors are overwhelming) I often give up and just copy the code. I have at times believed that some of these types are impossible to write down in a program (and can only exist in the type inferencer), but I don't know if that's actually true.<p><i>deep breath</i><p>Tree-sitter's user interface is rather different. You write your grammar in a javascript internal dsl, which gets run and produces a json file, and then a code generator reads that and produces C source code (I think the codegen is now written in rust).  This is a much more roundabout way of getting to a parser, but it's worth it because: (1) tree-sitter was designed for parsing programming languages  while nom very clearly was not, and (2) the parsers it generates are REALLY GOOD. Tree-sitter knows operator precedence, where nom cannot do this natively (there's a PR open for the next version: <a href="https://github.com/Geal/nom/pull/1362" rel="nofollow">https://github.com/Geal/nom/pull/1362</a>) Tree-sitter's parsing algorithm (GLR) is tolerant to recursion patterns that will send a parser combinator library off into the weeds, unless it uses special transformations to accommodate them.<p>It might sound like I'm shitting on nom here, but that's not the goal. It's a fantastic piece of work, and I've gotten a lot of value from it. But it's not <i>for</i> parsing programming languages. Reach for nom when you want to parse a binary file or protocol.<p>As for chumsky: the fact that it's a parser combinator library in Rust means that it's going to be subject to a lot of the same issues as nom, fundamentally. That's why I'm targeting tree-sitter next.<p>There's no reason tree-sitter grammars couldn't be written in an internal DSL, perhaps in parser-combinator style (<a href="https://github.com/engelberg/instaparse" rel="nofollow">https://github.com/engelberg/instaparse</a> does this). That could smooth over a lot of the rough edges.</p>
]]></description><pubDate>Sat, 09 Jul 2022 19:04:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=32038257</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=32038257</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32038257</guid></item><item><title><![CDATA[New comment by mullr in "Chumsky, a Rust parser-combinator library with error recovery"]]></title><description><![CDATA[
<p>Error recovery in nom is left as a very obtuse exercise to the reader. Custom error reporting is difficult at best. That stuff is supposed to be better in chumsky; I don’t know if it actually is.<p>However, for my own parser which is currently written in nom, my current plan is to port it over to tree-sitter. Its error recovery is completely automatic, and a fair sight better than anything I have time to do by hand.</p>
]]></description><pubDate>Sat, 09 Jul 2022 15:16:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=32035813</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=32035813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32035813</guid></item><item><title><![CDATA[New comment by mullr in "The next Google"]]></title><description><![CDATA[
<p>For Kagi, at least, there's a very well integrated search customization method that they didn't bother to show here. For any search result, you can add a ranking adjustment for the site it came from. This is directly in the results, so it's very accessible, and quite easy. One of the choices is 'pin', which is fantastic for technical work: 'sqlite.org' is now boosted over everything else, for me, and it's exactly what I want. I could just as easily take it out, if it becomes a problem.</p>
]]></description><pubDate>Tue, 05 Apr 2022 20:23:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=30924512</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=30924512</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30924512</guid></item><item><title><![CDATA[New comment by mullr in "Writing Literate API Documentation in Emacs Org Mode"]]></title><description><![CDATA[
<p>> If it's not too much to ask, do you mind sharing some of the pain points?<p>To me, the point of literate programming is that you have a coherent (literate, if you well) document that explains how the program actually works, and the reason it's put together how it is. This is NOT an easy thing to write. It takes as much organization as the program itself. I found the document structure to be continuously in flux, as I updated the program to deal with new requirements. So either document would poorly structured, or I would spend a LOT of time keeping it good.</p>
]]></description><pubDate>Sun, 30 Jan 2022 18:01:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=30139433</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=30139433</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30139433</guid></item><item><title><![CDATA[New comment by mullr in "Writing Literate API Documentation in Emacs Org Mode"]]></title><description><![CDATA[
<p>Yeah, it's really not. You CAN do knuth-style literate programming in org-mode (<a href="https://orgmode.org/manual/Extracting-Source-Code.html" rel="nofollow">https://orgmode.org/manual/Extracting-Source-Code.html</a>) I used it to make <a href="http://mullr.github.io/micrologic/literate.html" rel="nofollow">http://mullr.github.io/micrologic/literate.html</a>.<p>The experience completely cured me of Knuth-style literate programming, fwiw. It's really great for making a lasting artifact about a program that's completely done. But I can count the number of programs I've worked on like that on zero fingers. Even this one isn't really done, but the cost of updating the essay along with the code discouraged me from working on it any more.</p>
]]></description><pubDate>Sat, 29 Jan 2022 23:59:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=30131976</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=30131976</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30131976</guid></item><item><title><![CDATA[New comment by mullr in "uLisp on the Raspberry Pi Pico"]]></title><description><![CDATA[
<p>And to really rub salt on it, they have a syntax that looks very much like stock latex for math symbols, and SOME of them are the same, but not all of them! (all / forall is the one that comes to mind, it's been a little while)</p>
]]></description><pubDate>Mon, 17 Jan 2022 20:57:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=29971617</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=29971617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29971617</guid></item><item><title><![CDATA[New comment by mullr in "uLisp on the Raspberry Pi Pico"]]></title><description><![CDATA[
<p>you mean like 'u' for micro, and 'lambda'? I think this is pretty common.<p>Regardless, you're probably doing yourself a disservice if you're allowing things like that to take choices out of your toolbelt. Perhaps the worst offender is TLA+, where you have to write actual ascii art and latex inside your code (yes, I know model/spec). I <i>despise</i> it, to be clear, but it's still a pretty good tool and often the right thing to reach for</p>
]]></description><pubDate>Mon, 17 Jan 2022 20:40:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=29971475</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=29971475</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29971475</guid></item><item><title><![CDATA[New comment by mullr in "Backdooring Rust crates for fun and profit"]]></title><description><![CDATA[
<p>What are people doing about this on the client side? The solution that comes to mind is to do all my Rust builds in a sandbox of some kind, but with rust-analyzer involved, I'd likely have to put my editor in there as well.</p>
]]></description><pubDate>Thu, 18 Nov 2021 15:14:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=29266311</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=29266311</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29266311</guid></item><item><title><![CDATA[New comment by mullr in "Epic launches anti-cheat support for Linux, Mac, and Steam Deck"]]></title><description><![CDATA[
<p>> support for the Wine and Proton compatibility layers on Linux is included</p>
]]></description><pubDate>Thu, 23 Sep 2021 19:48:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=28634318</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=28634318</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28634318</guid></item><item><title><![CDATA[New comment by mullr in "Taming Go’s memory usage, or how we avoided rewriting our client in Rust"]]></title><description><![CDATA[
<p>> Isn't part of the point of Rust that you don't manage memory yourself, and rather that the compiler is smart enough to manage it for you?<p>For trivial cases, kind of. But once you start to do anything remotely sophisticated, no. Everything you do in Rust is <i>checked</i> w.r.t. memory management, but you still need to make many choices about it. All the stuff about lifetimes, borrowing, etc: that's memory management. The compiler's checking it for you, but you still need to design stuff sanely, with memory management (and the checking thereof) in mind. It's easy to back yourself into a corner if you ignore this.</p>
]]></description><pubDate>Tue, 21 Sep 2021 18:56:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=28608496</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=28608496</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28608496</guid></item><item><title><![CDATA[New comment by mullr in "Stateright: A model checker for implementing distributed systems"]]></title><description><![CDATA[
<p>As a regular web dev, you are constantly staring a distributed system in the face: it’s made of the program running on the server (back end), and the program running in the web browser (front end). How do those two programs agree on pieces of common information? How does the server deal with communications from other clients? At what cadence? How are the caches invalidated? Regular web dev is anything but simple, if you seriously consider the questions it poses. Tools like this help you think such questions.</p>
]]></description><pubDate>Sun, 06 Jun 2021 20:20:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=27415973</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=27415973</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27415973</guid></item><item><title><![CDATA[New comment by mullr in "Launch HN: UPchieve (YC W21 Nonprofit) – Live tutoring for low-income students"]]></title><description><![CDATA[
<p>> Tutoring sessions on our platform are completed using a whiteboard and text-based chat (no audio and video).<p>Have you found that to be sufficient? I recently tried doing some online tutoring, and I found that even with an audio connection, I had a lot of trouble telling if anything I said was landing at all. I came away from the experience rather disillusioned with the idea of trying to do this online at all.</p>
]]></description><pubDate>Tue, 11 May 2021 17:28:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=27120858</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=27120858</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27120858</guid></item><item><title><![CDATA[New comment by mullr in "Exploiting Aliasing for Manga Restoration"]]></title><description><![CDATA[
<p>They are willing to share the dataset, just tell them what you want to do with it.</p>
]]></description><pubDate>Sat, 08 May 2021 00:15:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=27082352</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=27082352</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27082352</guid></item><item><title><![CDATA[New comment by mullr in "[dead]"]]></title><description><![CDATA[
<p>A truly staggering amount of “scare quotes.”<p>From the site:<p>> As a conservative watchdog to the nation’s higher education system, Campus Reform exposes liberal bias and abuse on the nation’s college campuses.<p>The likelihood this is accurate is very low.</p>
]]></description><pubDate>Sat, 03 Apr 2021 15:06:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=26681616</link><dc:creator>mullr</dc:creator><comments>https://news.ycombinator.com/item?id=26681616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26681616</guid></item></channel></rss>