<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: trws</title><link>https://news.ycombinator.com/user?id=trws</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 29 Apr 2026 11:59:38 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=trws" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by trws in "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]]></title><description><![CDATA[
<p>Everything else in the siblings is true, but remember that the language and std types in rust all do this already. Most of the time it’s better to use a native enum or optional/result because they do this in the compiler/lib. It’s only really worth it if you need more than a few types or need precise control of the representation for C interop or something.</p>
]]></description><pubDate>Thu, 12 Mar 2026 16:25:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=47353278</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=47353278</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47353278</guid></item><item><title><![CDATA[New comment by trws in "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]]></title><description><![CDATA[
<p>It’s Hana Dusikova’s  paper IIRC.</p>
]]></description><pubDate>Thu, 12 Mar 2026 16:23:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47353243</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=47353243</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47353243</guid></item><item><title><![CDATA[New comment by trws in "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]]></title><description><![CDATA[
<p>There’s a paper in flight to add a stdlib type to handle pointer tagging as well while preserving pointer provenance and so-forth. It’s currently best to use the intptr types, but the goal is to make it so that an implementation can provide specializations based on what bits of a pointer are insignificant, or even ignored, on a given target without user code having to be specialized. Not sure where it has landed since discussion in SG1 but seemed like a good idea.</p>
]]></description><pubDate>Thu, 12 Mar 2026 15:23:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47352077</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=47352077</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47352077</guid></item><item><title><![CDATA[New comment by trws in "SQLite as an Application File Format"]]></title><description><![CDATA[
<p>I worked @fzakaria on developing that idea. It actually worked surprisingly well. The benefits are mostly in the ability to analyze the binary afterward though rather than any measurable benefit in load time or anything like that though. I don’t have the repo for the musl-based loader handy, but here’s the one for the virtual table plugin for SQLite to read from raw ELF files: <a href="https://github.com/fzakaria/sqlelf" rel="nofollow">https://github.com/fzakaria/sqlelf</a></p>
]]></description><pubDate>Fri, 28 Nov 2025 15:18:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46079377</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=46079377</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46079377</guid></item><item><title><![CDATA[New comment by trws in "From Rust to reality: The hidden journey of fetch_max"]]></title><description><![CDATA[
<p>I liked the article. I saw your PS that we added it to the working draft for c++26, we also made it part of OpenMP as of 5.0 I think. It’s sometimes a hardware atomic like on arm, but what made the case was that it’s common to implement it sub-optimally even on x86 or LL-SC architectures. Often the generic cas loop gets used, like in your lambda example, but it lacks an early cutout since you can ignore any input value that’s on the wrong side of the op by doing a cheap atomic read or just cutting out of the loop after the first failed CAS if the read back shows it can’t matter. Also can benefit from using slightly different memory orders than the default on architectures like ppc64. It’s a surprisingly useful op to support that way.<p>If this kind of thing floats your boat, you might be interested in the non-reading variants of these as well. Mostly for things like add, max, etc but some recent architectures actually offer alternate operations to skip the read-back. The paper calls them “atomic reduction operations” <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3111r6.html" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p31...</a></p>
]]></description><pubDate>Tue, 23 Sep 2025 23:15:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45354051</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=45354051</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45354051</guid></item><item><title><![CDATA[New comment by trws in "Safepoints and Fil-C"]]></title><description><![CDATA[
<p>Quite so. We would have too, but I left out the nasty bit that someone had at one point put a callback argument in an internal launching API that runs between fork and exec. Still working on squashing the last of those.</p>
]]></description><pubDate>Sat, 20 Sep 2025 19:49:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45316719</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=45316719</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45316719</guid></item><item><title><![CDATA[New comment by trws in "Safepoints and Fil-C"]]></title><description><![CDATA[
<p>The other place it comes up is launchers and resource managers. We actually have a series of old issues and implementation work on flux (large scale resource manager for clusters) working around fork becoming a significant bottleneck in parallel launch. IIRC it showed up when we had ~1gb of memory in use and needed to spawn between 64 and 192 processes per node. That said, we actually didn’t pivot to vfork, we pivoted to posix_spawn for all but the case where we have to change working directory (had to support old glibc without the attr for that in spawn).  If you’re interested I think we did some benchmarking with public results I could dredge up.<p>Anyway, much as I have cases where it matters I guess what I’m saying is I think you’re right that vfork is rarely actually necessary, especially since you’d probably have a much easier time getting a faster and still deterministic spawn if it ever actually becomes a bottleneck for something you care about.</p>
]]></description><pubDate>Fri, 19 Sep 2025 22:36:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=45307571</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=45307571</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45307571</guid></item><item><title><![CDATA[New comment by trws in "Object-oriented design patterns in C and kernel development"]]></title><description><![CDATA[
<p>I largely agree, and use these patterns in C, but you’re neglecting the usual approach of having a default or stub implementation in the base for classic OOP. There’s also the option of using interfaces in more modern OOP or concept-style languages where you can cast to an interface type to only require the subset of the API you actually need to call.  Go is a good example of this, in fact doing the lookup at runtime from effectively a table of function pointers like this.</p>
]]></description><pubDate>Tue, 26 Aug 2025 21:57:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=45032846</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=45032846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45032846</guid></item><item><title><![CDATA[New comment by trws in "Framework Laptop 16"]]></title><description><![CDATA[
<p>You have this largely right, but I need to defend the Radeon driver a bit here. The driver that caused all the problems was the proprietary fglrx driver, not the open source Radeon driver. The issue with the Radeon driver wasn’t stability, it was that it was 2d acceleration only.</p>
]]></description><pubDate>Tue, 26 Aug 2025 21:49:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=45032763</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=45032763</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45032763</guid></item><item><title><![CDATA[New comment by trws in "uBlock Origin Lite Beta for Safari iOS"]]></title><description><![CDATA[
<p>I just started giving it a try again about a week ago, and I second this. A year ago it was nearly unusable for any extension outside their preferred list, now it’s largely a pleasant experience.</p>
]]></description><pubDate>Sun, 22 Jun 2025 08:41:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=44345152</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=44345152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44345152</guid></item><item><title><![CDATA[New comment by trws in "Expanding Racks [video]"]]></title><description><![CDATA[
<p>I’m rather hoping there’s something better, but various CAD formats support specifying assemblies of objects, and joints between those objects that can represent properties like that. Often this comes with at least some level of simulation, or if not simulation imposed constraints like in the FreeCAD assembly workbench, allowing you to move connected parts in the assembly but only through the range permitted by the “joint”. I quote that because that includes things like meshed gears, linear slides, ball joints, all kinds of things like that some of which I would not call joints as such.</p>
]]></description><pubDate>Thu, 12 Jun 2025 05:57:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=44254645</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=44254645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44254645</guid></item><item><title><![CDATA[New comment by trws in "Apple announces Foundation Models and Containerization frameworks, etc"]]></title><description><![CDATA[
<p>The short answer is yes, Linux can be informed to some extent but often you still want a memory balloon driver so that the host can “allocate” memory out of the VM so the host OS can reclaim that memory. It’s not entirely trivial but the tools exist, and it’s usually not too bad on vz these days when properly configured.</p>
]]></description><pubDate>Tue, 10 Jun 2025 09:51:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=44234713</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=44234713</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44234713</guid></item><item><title><![CDATA[New comment by trws in "Why We're Moving on from Nix"]]></title><description><![CDATA[
<p>> Is this obvious, simple, and default behaviour?<p>Yes. There are two options IIRC, minimum layers and maximum layers (one per dep by default unless that makes too many, which is handled automatically) depending on what you want, and it’s a Boolean flag. If you need more control it’s more complicated but this one really is a strange criticism unless they’re using non-standard wrappers for the usual nix way to do this.</p>
]]></description><pubDate>Sat, 07 Jun 2025 23:14:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=44213329</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=44213329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44213329</guid></item><item><title><![CDATA[New comment by trws in "The Origin of the Pork Taboo"]]></title><description><![CDATA[
<p>Much as the article makes good points, I find it difficult to believe that the list of meats banned by kosher and halal matches the top allergies and disease risk factors as well as it does without some intent. Pork was, until very recently, the greatest risk for parasitic infection, insects in a similar spot. Shellfish are the top meat allergy, by a whole lot. Most of the rest of the rules about preparation amount to good practices for ensuring cleanliness or at least reasonable preservation and parasite prevention.  There are exceptions, I can’t think of a practical reason for not allowing meat and dairy to come into contact, but the vast majority would have kept people healthier.<p>Whether it originated from an us vs them ideology or not, there were practical benefits for a population that made those choices that would have reinforced it in pre-modern times.</p>
]]></description><pubDate>Wed, 19 Mar 2025 14:22:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=43412404</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=43412404</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43412404</guid></item><item><title><![CDATA[New comment by trws in "Curl with Partial Files"]]></title><description><![CDATA[
<p>The first one that comes to mind is something I haven’t done lately but used to do <i>constantly</i>, enough so that I wrote a custom fuse filesystem to combine isofuse with http handling, and that’s parsing an index from something with a range request then fetching only the part or parts I want. Think fetching only the trailing index from a zip archive and then fetching the specific file you want out of a 10tb zip rather than downloading the whole thing. Now, how often would I do this on the command line? Not sure, but I might not have bothered with fuse if I’d had the option.</p>
]]></description><pubDate>Mon, 30 Dec 2024 21:28:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=42553760</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=42553760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42553760</guid></item><item><title><![CDATA[New comment by trws in "Waiting for many things at once with io_uring"]]></title><description><![CDATA[
<p>An inotify replacement that can work at whole FS level (and doesn’t require root/admin like the existing option) would be amazing. To be honest, I don’t see a reason it would be hard at the whole filesystem or perhaps mount level unless there are security ramifications. Restricting it to a subdirectory might be tricky though.</p>
]]></description><pubDate>Mon, 18 Nov 2024 18:48:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=42175555</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=42175555</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42175555</guid></item><item><title><![CDATA[New comment by trws in "M4 Macs can't virtualise older macOS"]]></title><description><![CDATA[
<p>CI is the big one, or similar testing against older versions for backwards compatibility. Usually good enough to just compile for it on MacOS, but sometimes we get a surprise in a third party library or something that only shows up on an older release.</p>
]]></description><pubDate>Sat, 16 Nov 2024 17:02:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=42157432</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=42157432</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42157432</guid></item><item><title><![CDATA[New comment by trws in "CockroachDB license change"]]></title><description><![CDATA[
<p>A small refinement here, your statements are largely my experience dealing with people <i>linking against</i> gpl3 software because of the vitality and the patent exemptions. Most places <i>run</i> gpl3 stuff just fine. The one organizations won’t touch with a ten foot pole, even to run it, is AGPL.</p>
]]></description><pubDate>Thu, 15 Aug 2024 22:06:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=41260937</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=41260937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41260937</guid></item><item><title><![CDATA[New comment by trws in "Introduction to Golang Preemption Mechanisms"]]></title><description><![CDATA[
<p>I think your comment was once completely correct, but there is now also a “cpuset” cgroup in addition to the classic cpu setting. The cpuset control gives something equivalent to sched_setaffinity but stronger since the client processes can’t unset parts of the mask or override it IIRC.</p>
]]></description><pubDate>Mon, 12 Aug 2024 18:18:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=41227625</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=41227625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41227625</guid></item><item><title><![CDATA[New comment by trws in "Show HN: Attaching to a virtual GPU over TCP"]]></title><description><![CDATA[
<p>Some computation tasks can tolerate the latency if they’re written with enough overlap and can keep enough of the data resident, but they usually need more performant networking than this. See older efforts like rcuda for remote cuda over infiniband as an example. It’s not ideal, but sometimes worth it. Usually the win is in taking a multi-GPU app and giving it 16 or 32 of them rather than a single remote GPU though.</p>
]]></description><pubDate>Fri, 09 Aug 2024 21:56:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=41205686</link><dc:creator>trws</dc:creator><comments>https://news.ycombinator.com/item?id=41205686</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41205686</guid></item></channel></rss>