<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: ndesaulniers</title><link>https://news.ycombinator.com/user?id=ndesaulniers</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 08 Apr 2026 11:23:19 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=ndesaulniers" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by ndesaulniers in "Author of "Careless People" banned from saying anything negative about Meta"]]></title><description><![CDATA[
<p>It was a page turner. I recommend it.</p>
]]></description><pubDate>Sat, 04 Apr 2026 22:39:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=47644265</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47644265</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47644265</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Hollywood Enters Oscars Weekend in Existential Crisis"]]></title><description><![CDATA[
<p>When you buy movie tickets, you go see the movie.<p>When I purchase a game, I generally don't have time to play it.<p>We are not the same.<p>This may be why gaming is a few multiples larger an industry than film.</p>
]]></description><pubDate>Sun, 15 Mar 2026 20:21:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47391450</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47391450</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47391450</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]]></title><description><![CDATA[
<p>Consider amending those references to your post!</p>
]]></description><pubDate>Fri, 13 Mar 2026 19:55:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47368982</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47368982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47368982</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Emacs internals: Tagged pointers vs. C++ std:variant and LLVM (Part 3)"]]></title><description><![CDATA[
<p>Happy to see discussion of LLVM's interesting implementation of Static Polymorphism using CRTP.  Some recommended reads:<p>1. <a href="https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern" rel="nofollow">https://en.wikipedia.org/wiki/Curiously_recurring_template_p...</a><p>2. <a href="https://david.alvarezrosa.com/posts/devirtualization-and-static-polymorphism/" rel="nofollow">https://david.alvarezrosa.com/posts/devirtualization-and-sta...</a><p>3. <a href="https://llvm.org/docs/ProgrammersManual.html#the-isa-cast-and-dyn-cast-templates" rel="nofollow">https://llvm.org/docs/ProgrammersManual.html#the-isa-cast-an...</a></p>
]]></description><pubDate>Thu, 12 Mar 2026 18:10:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47354920</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47354920</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47354920</guid></item><item><title><![CDATA[Boosting Android Performance: Introducing AutoFDO for the Kernel]]></title><description><![CDATA[
<p>Article URL: <a href="https://android-developers.googleblog.com/2026/03/BoostingAndroid%20PerformanceIntroducingAutoFDO.html">https://android-developers.googleblog.com/2026/03/BoostingAndroid%20PerformanceIntroducingAutoFDO.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47344839">https://news.ycombinator.com/item?id=47344839</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 12 Mar 2026 00:55:36 +0000</pubDate><link>https://android-developers.googleblog.com/2026/03/BoostingAndroid%20PerformanceIntroducingAutoFDO.html</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47344839</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47344839</guid></item><item><title><![CDATA[New comment by ndesaulniers in "10% of Firefox crashes are caused by bitflips"]]></title><description><![CDATA[
<p>I still remember summoning flesh golems as a necromancer! Too much of my life sunk into GW1. Beat all 4(?) expansions. Logged in years later after I finally put it down to find someone had guessed my weak password, stole everything, then deleted all my characters. C'est la vie.</p>
]]></description><pubDate>Fri, 06 Mar 2026 03:09:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47270354</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47270354</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47270354</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Americans are destroying Flock surveillance cameras"]]></title><description><![CDATA[
<p>I took a look at the schematics for the two fuse boxes in my 2023 Chevrolet and _could not tell which/if any_ fuse was dedicated to a cellular modem.<p>This was in regards to:
<a href="https://www.ftc.gov/news-events/news/press-releases/2025/01/ftc-takes-action-against-general-motors-sharing-drivers-precise-location-driving-behavior-data" rel="nofollow">https://www.ftc.gov/news-events/news/press-releases/2025/01/...</a></p>
]]></description><pubDate>Mon, 23 Feb 2026 21:55:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47129522</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=47129522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47129522</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Both GCC and Clang generate strange/inefficient code"]]></title><description><![CDATA[
<p>Was looking at the llvm case with the dead store to the stack.<p><a href="https://godbolt.org/z/Kb736onb4" rel="nofollow">https://godbolt.org/z/Kb736onb4</a><p><pre><code>  \*\* IR Dump After Expand memcmp() to load/stores (expand-memcmp) \*\*
  ; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: read) uwtable
  define dso_local noundef zeroext i1 @isAllZeros(ptr noundef nonnull readonly align 4 captures(none) dereferenceable(8) %0) local_unnamed_addr #0 {
    %2 = alloca %"struct.std::array", align 8
    call void @llvm.lifetime.start.p0(ptr %2)
    store i64 0, ptr %2, align 8
    %3 = load i64, ptr %0, align 4
    %4 = load i64, ptr %2, align 8
    %5 = icmp ne i64 %3, %4
    %6 = zext i1 %5 to i32
    %7 = icmp eq i32 %6, 0
    call void @llvm.lifetime.end.p0(ptr %2)
    ret i1 %7
  }
</code></pre>
It looks like expand-memcmp in the backend converts a call to bcmp to multiple loads/stores.  Perhaps expand-memcmp should then do a round of store-to-load forwarding.<p>Filed <a href="https://github.com/llvm/llvm-project/issues/180991" rel="nofollow">https://github.com/llvm/llvm-project/issues/180991</a> which I think is what the author should do in cases like this (rather than a blog post).</p>
]]></description><pubDate>Wed, 11 Feb 2026 18:33:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46978826</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46978826</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46978826</guid></item><item><title><![CDATA[Robinson–Patman Act]]></title><description><![CDATA[
<p>Article URL: <a href="https://en.wikipedia.org/wiki/Robinson%E2%80%93Patman_Act">https://en.wikipedia.org/wiki/Robinson%E2%80%93Patman_Act</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46971969">https://news.ycombinator.com/item?id=46971969</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 11 Feb 2026 07:28:42 +0000</pubDate><link>https://en.wikipedia.org/wiki/Robinson%E2%80%93Patman_Act</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46971969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46971969</guid></item><item><title><![CDATA[New comment by ndesaulniers in "Oxide raises $200M Series C"]]></title><description><![CDATA[
<p>For those of us who are unaware of "the value proposition" of an "IBM AS/400," could someone spell it out for us?</p>
]]></description><pubDate>Tue, 10 Feb 2026 19:04:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46965120</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46965120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46965120</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>In practice, one of the difficulties in getting _clang_ to assemble the Linux kernel (as opposed to GNU `as` aka GAS), was having clang implement support for "fragments" in more places.<p><a href="https://eli.thegreenplace.net/2013/01/03/assembler-relaxation" rel="nofollow">https://eli.thegreenplace.net/2013/01/03/assembler-relaxatio...</a><p>There were a few cases IIRC around usage of the `.` operator which means something to the effect of "the current point in the program." It can be used in complex expressions, and sometimes resolving those requires multiple passes.  So supporting GAS compatible syntax in more than just the basic cases forces the architecture of your assembler to be multi-pass.</p>
]]></description><pubDate>Mon, 09 Feb 2026 16:42:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=46947413</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46947413</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46947413</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>Guess I better add <a href="https://github.com/bytecodealliance/rfcs/blob/main/accepted/cranelift-egraph.md#recap-e-graphs" rel="nofollow">https://github.com/bytecodealliance/rfcs/blob/main/accepted/...</a> to my reading list!</p>
]]></description><pubDate>Fri, 06 Feb 2026 22:50:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=46919271</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46919271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46919271</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>> I would love to meet these imaginary people that are fine with a compiler that is straight up broken.<p>That's not what I said; you're attacking a strawman.<p>My point was more so that some people prefer the madness that is -funsafe-math-optimizations, or happen to rely on UB (intentionally or otherwise).  What even is "correct" in the presence of UB?  What is correct in such case was left up to interpretation of the implementer by ISO WG14.</p>
]]></description><pubDate>Fri, 06 Feb 2026 18:58:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46916685</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46916685</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46916685</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>This work originally wasn't my 100% project, it was my 20% project (or as I prefer to call it, 120% project).<p>I had to move teams twice before a third team was able to say: this work is valuable to us, please come work for us and focus just on that.<p>I had to organize multiple internal teams, then build an external community of contributors to collaborate on this shared common goal.<p>Having carte blanche to contribute to open source projects made this feasible at all; I can see that being a non-starter at many employers, sadly. Having low friction to change teams also helped a lot.</p>
]]></description><pubDate>Fri, 06 Feb 2026 18:55:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46916638</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46916638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46916638</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>> extensions<p>Some were necessary (asm goto), some were not (nested functions, flexible array members not at the end of structs).<p>> UDB, bugs and all<p>Luckily, the kernel didn't intentionally rely on GCC specifics this way. Where it did unintentionally, we fixed the kernel sources properly with detailed commit messages explaining why.<p>> or were there any issues that might be considered as specific to the linux kernel?<p>Yes, <a href="https://github.com/ClangBuiltLinux/linux/issues" rel="nofollow">https://github.com/ClangBuiltLinux/linux/issues</a> is our issue tracker. We use tags extensively to mark if we triage the issue to be kernel-side vs toolchain-side.<p>> Did you end up building a gcc compatability test suite as a part of this?<p>No, but some tricky cases LLVM got wrong were distilled from kernel sources using either:<p>- creduce
- cvise (my favorite)
- bugpoint
- llvm-reduce<p>and then added to LLVM's existing test suite.  Many such tests were also simply manually written.<p>> Did the gcc project themselves have a regression/test suite that you were able to use as a starting point?<p>GCC and binutils have their own test suites.  Folks in the LLVM community have worked on being able to test clang against GCC's test suite.  I personally have never run GCC's test suite or looked at its sources.</p>
]]></description><pubDate>Fri, 06 Feb 2026 16:44:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46915094</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46915094</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46915094</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3685.pdf" rel="nofollow">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3685.pdf</a><p>Read section J.1.</p>
]]></description><pubDate>Fri, 06 Feb 2026 07:16:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46910029</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46910029</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46910029</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>Yeah, my current boss spent time weeding out such hardware bugs: <a href="https://arxiv.org/abs/2110.11519" rel="nofollow">https://arxiv.org/abs/2110.11519</a> (EDIT: maybe <a href="https://x.com/Tesla_AI/status/1930686196201714027" rel="nofollow">https://x.com/Tesla_AI/status/1930686196201714027</a> is a more relevant citation)<p>They found a bimodal distribution in failures over the lifetime of chips. Infant mortality was well understood. Silicon aging over time was much less well understood, and I still find surprising.</p>
]]></description><pubDate>Thu, 05 Feb 2026 23:17:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46906816</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46906816</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46906816</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>We're already starting to see people experimenting with applying AI towards register allocation and inlining heuristics.  I think that many fields within a compiler are still ripe for experimentation.<p><a href="https://llvm.org/docs/MLGO.html" rel="nofollow">https://llvm.org/docs/MLGO.html</a></p>
]]></description><pubDate>Thu, 05 Feb 2026 22:31:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46906339</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46906339</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46906339</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>Some people care more about compile times than the performance of generated code. Perhaps even the correctness of generated code. Perhaps more so than determinism of the generated code.  Different people in different contexts can have different priorities. Trying to make everyone happy can sometimes lead to making no one happy.  Thus dichotomies like `-O2` vs `-Os`.<p>EDIT (since HN is preventing me from responding):<p>> Some people care more about compiler speed than the correctness?<p>Yeah, I think plenty of people writing code in languages that have concepts like Undefined Behavior technically don't really care as much about correctness as they may claim otherwise, as it's pretty hard to write large volumes of code without indirectly relying on UB somewhere. What is correct in such case was left up to interpretation of the implementer by ISO WG14.</p>
]]></description><pubDate>Thu, 05 Feb 2026 22:26:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46906290</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46906290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46906290</guid></item><item><title><![CDATA[New comment by ndesaulniers in "We tasked Opus 4.6 using agent teams to build a C Compiler"]]></title><description><![CDATA[
<p>There's parts of LLVM architecture that are long in the tooth (IMO) (as is the language it's implemented in, IMO).<p>I had hoped one day to re-implement parts of LLVM itself in Rust; in particular, I've been curious if we can concurrently compile C (and parse C in parallel, or lazily) that haven't been explored in LLVM, and I think might be safer to do in Rust.  I don't know enough about grammers to know if it's technically impossible, but a healthy dose of ignorance can sometimes lead to breakthroughs.<p>LLVM is pretty well designed for test.  I was able to implement a lexer for C in Rust that could lex the Linux kernel, and use clang to cross check my implementation (I would compare my interpretation of the token stream against clang's).  Just having a standard module system makes having reusable pieces seems like perhaps a better way to compose a toolchain, but maybe folks with more experience with rustc have scars to disagree?</p>
]]></description><pubDate>Thu, 05 Feb 2026 22:22:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46906234</link><dc:creator>ndesaulniers</dc:creator><comments>https://news.ycombinator.com/item?id=46906234</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46906234</guid></item></channel></rss>