<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: titzer</title><link>https://news.ycombinator.com/user?id=titzer</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Apr 2026 22:52:44 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=titzer" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by titzer in "Writing a C Compiler, in Zig (2025)"]]></title><description><![CDATA[
<p>I think once you get the design of the IR right and implement it relatively efficiently, an optimizing compiler is going to be complicated enough that tweaking the heck out of low-level data structures won't help much. (For a baseline compiler, maybe...but).<p>E.g. when I ported C1 from C++ to Java for Maxine, straightforward choices of modeling the IR the same and basic optimizations allowed me to make it even faster than C1. C1X was a basic SSA+CFG design with a linear scan allocator. Nothing fancy.<p>The Virgil compiler is written in Virgil. It's a very similar SSA+CFG design. It compiles plenty fast without a lot of low-level tricks. Though, truth be told I went overboard optimizing[1] the x86 backend and it's significantly faster (maybe 2x) than the nicer, more pretty x86-64 backend. I introduced a bunch of fancy representation optimizations for Virgil since then, but they don't really close the gap.<p>[1] It's sad that even in the 2020s the best way to make something fast is to give up on abstractions and use integers and custom encodings into integers for everything. Trying to fix that though!</p>
]]></description><pubDate>Fri, 24 Apr 2026 00:27:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47884039</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47884039</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47884039</guid></item><item><title><![CDATA[New comment by titzer in "Do you want the US to "win" AI?"]]></title><description><![CDATA[
<p>> The point of the economic system is it channels some of the most ghoulish and horrible people to do good as an accidental side effect of their mad rush to wealth and power. Works really well, on average everyone wins.<p>When there is a functioning justice system that enforces the law, rather than a corrupt oligarchy/kleptocracy/kakistocracy.</p>
]]></description><pubDate>Thu, 23 Apr 2026 14:40:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=47876313</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47876313</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47876313</guid></item><item><title><![CDATA[New comment by titzer in "F-35 is built for the wrong war"]]></title><description><![CDATA[
<p>The total cost of the entire program over its projected lifetime is $1.7 trillion. The F-35 is made by one company, Lockheed Martin (with some pieces made by a couple others). This entire program is a massive transfer of taxpayer money into one company.<p>Another data point is that it's estimated that all student debt in the US combined is $1.7 - 1.8 trillion.<p>No wonder America keeps falling behind.</p>
]]></description><pubDate>Mon, 20 Apr 2026 20:45:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47840306</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47840306</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47840306</guid></item><item><title><![CDATA[New comment by titzer in "Atlassian enables default data collection to train AI"]]></title><description><![CDATA[
<p>AI contributing to rising natural stupidity.</p>
]]></description><pubDate>Mon, 20 Apr 2026 15:58:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47836171</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47836171</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47836171</guid></item><item><title><![CDATA[New comment by titzer in "Why Japan has such good railways"]]></title><description><![CDATA[
<p>This is mostly true until it's time to build an interstate.</p>
]]></description><pubDate>Sat, 18 Apr 2026 14:43:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47816309</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47816309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47816309</guid></item><item><title><![CDATA[New comment by titzer in "Why Japan has such good railways"]]></title><description><![CDATA[
<p>The US interstate system is incredible extensive, uniform, and well-maintained (relatively speaking). States love federal dollars, and if there were federal dollars for train lines, they'd fall over themselves to get them. That doesn't seem to happen for a lot of reasons. It seems like there are a lot of corruption problems that seem to eat up train projects, but for some reason the interstate system, though replete with plenty of boondoggles, is an unstoppable road-spreading machine.</p>
]]></description><pubDate>Sat, 18 Apr 2026 14:41:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47816288</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47816288</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47816288</guid></item><item><title><![CDATA[New comment by titzer in "Ban the sale of precise geolocation"]]></title><description><![CDATA[
<p>These people really have no idea at the level of data collection from Google's rootkit on Android known as "Google Play Services".</p>
]]></description><pubDate>Fri, 17 Apr 2026 16:05:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47807418</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47807418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47807418</guid></item><item><title><![CDATA[New comment by titzer in "Everything we like is a psyop?"]]></title><description><![CDATA[
<p>The government is broken. I'm not sure what you are hoping for.</p>
]]></description><pubDate>Fri, 17 Apr 2026 01:13:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47801508</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47801508</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47801508</guid></item><item><title><![CDATA[New comment by titzer in "FSF trying to contact Google about spammer sending 10k+ mails from Gmail account"]]></title><description><![CDATA[
<p>You have to realize that once Google flips the bit on you and they think you are trying to scam them (or others via them) you are absolutely dead to them. They don't want to hear from you ever again. You're banned to hell. The fact that a billing system didn't get switched off isn't so surprising; the internal architecture of their systems is so complicated that it would take multiple human lifetimes to explain how it all works.</p>
]]></description><pubDate>Thu, 16 Apr 2026 13:53:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=47792986</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47792986</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47792986</guid></item><item><title><![CDATA[New comment by titzer in "Claude Code Routines"]]></title><description><![CDATA[
<p>Just wait until they get into the phase where they're big enough that they're eating all the baby startups and have to pick winners and losers amongst the myriad of overlapping features while also having the previous baby startups they acquired crank out new features.<p>We're watching a speed run of growthism, folks.</p>
]]></description><pubDate>Tue, 14 Apr 2026 22:13:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47772159</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47772159</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47772159</guid></item><item><title><![CDATA[New comment by titzer in "The acyclic e-graph: Cranelift's mid-end optimizer"]]></title><description><![CDATA[
<p>Well obviously I don't think that you're a bunch of dummies so please don't throw out strawmen like that.<p>I don't know if Cliff is on the same page w.r.t. how much speculation is necessary (and when) to make JS go fast. In particular, inserting speculative guards has the nice property of improving downstream information for dominated control flow paths. Dominated control flow paths are few and far between when the control chain is very relaxed (in fact, that's the point of a relaxed dependency representation--the graph doesn't have induced dominance information, just dependencies). So relaxing ordering actually works against making use of speculation decisions, because speculation decisions have all these downstream (forward) benefits. It actually makes a lot of sense to work out what speculations are going to be done and propagate their effects on a fully-scheduled CFG[1].<p>The case is not the same in Java. In C2, afaict, all speculation happens at graph build time, which is driven by abstract interpretation of the bytecode, which follows the control flow order. That means it can make use of dominance information.<p>AFAIK Graal does scheduling multiple times, whenever it needs to know explicit control information. This allows its speculations to propagate forward to dominated paths.<p>>  Maybe this was a JS specific idiosyncrasy, but my experience was that the effect chain became almost homomorphic to the control chain (and when it wasn't, we had bugs), and then you may as well merge the two into a CFG - if you have to skip over links in your effect chain to skip over certain kinds of effect then you can equally well skip over zero effect nodes too. With SoN, we got all the costs and (almost none) of the benefits, hoisting really isn't so difficult that you have to design your whole IR around it.<p>I think this is the core of the problem. Control and effects are different things and it wasn't until long after TurboFan that I understood this well enough to even articulate it to myself, let alone to others. The only nodes that really need control inputs are those that have write effects or could diverge (not terminate). Reads of mutable state don't need control, they just need to have an effect input to order them w.r.t. writes. Writes don't need to depend on reads, like they did in TF IR; they are anti-dependencies that can be treated differently. From conversations with Cliff, I think C2 does treat antidependencies differently. Truth be told, writes don't even need to have control dependencies if the scheduler replicates code to make sure that different versions of the world are not simultaneously live (i.e. they are affine resources). The control dependencies in TF graphs were basically a CFG embedded in the graph and making writes depend on control more or less achieved that affine-ness.<p>While JS has far too many things that can change the world, it's clearly not the case that all the effect chains were linear, because load elimination would never happen, and no code motion would ever be possible. While it's hard to know how you think of "multiple effect chains"--it doesn't have to be represented by a multiple of edges in the graph. You can still have a single effect edge per node in most cases.<p>In the end it seemed like some people were really intent on only thinking about optimization from a CFG perspective and chaining a CFG through all effectful things, completely defeating the purpose of a dependency graph. People think about IRs in different ways, sure, but the dependency graph view and mindset is inherent in the sea of nodes representation. "Walking the code forward" is a common mental mode for CFG optimizations but is just alien to sea of nodes.<p>[1] To cut to the chase, and hindsight is 20/20, I think the best design for JS optimization is to use a CFG for a lot of frontend and middle optimizations, before lowering, to use it to insert speculations, and then to thread only a minimal effect / control chain to make a sea of nodes graph, run all the optimizations again, and reschedule it to a CFG. TBH I am not sure whether lowering should happen on a CFG or SoN--it does matter, but I don't think there's a definitive answer. But definitely run GVN on SoN after lowering--there's a bazillion common subexpressions to find then. It'd be great if optimizations can be written to be independent of whether a node is hooked up in a CFG or a SoN, to allow reuse between the two different representations. Or if the representation was sufficiently parametric that nodes could be hooked up in either configuration.</p>
]]></description><pubDate>Tue, 14 Apr 2026 20:18:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=47770922</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47770922</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47770922</guid></item><item><title><![CDATA[New comment by titzer in "The acyclic e-graph: Cranelift's mid-end optimizer"]]></title><description><![CDATA[
<p>Thanks for writing the article, btw. I didn't have a chance to go through the whole thing yet.<p>Did you have a chance to study Graal's IR? It is a hybrid between sea of nodes and CFG; it can contain some "fixed" nodes that can be wired into basic blocks. It can also be relaxed and have nearly everything floating.<p>TurboFan's IR was very close to C2, but it had even more things that could float. E.g. a pure operation could be lowered to a subgraph with internal control. TurboFan's schedule could move entire floating control islands and attach them to the main CFG skeleton, or remove them entirely.<p>I'm working on a new IR and I'll be able to share more soon.</p>
]]></description><pubDate>Tue, 14 Apr 2026 15:38:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47767093</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47767093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47767093</guid></item><item><title><![CDATA[New comment by titzer in "The acyclic e-graph: Cranelift's mid-end optimizer"]]></title><description><![CDATA[
<p>Well it's hard to summarize what I said in the Coffee Compiler club chat in a HN comment, but there were a number of things that went wrong there. I half agree with Cliff and half agree with the V8 blogpost. TurboFan evolved into a very complicated compiler that made a number of things harder on itself that it should have been.<p>The sea of nodes is just extending SSA renaming on values to both control and effects. Effect dependencies are equivalent SSA renaming of the state of the world, allowing relaxed ordering of effectful operations and more general transforms. That means that GVN and load elimination are the same thing when effect dependencies are explicitly part of the graph.<p>Making control and effect dependencies explicit is great!<p>What makes the sea of nodes complicated is relaxing linear control and effects to allow more reorderings. Many optimizations require a more general algorithm (which is sometimes inefficient, but mostly not) and other optimizations can be almost impossible. E.g. reasoning about what happens <i>between</i> two instructions is impossible--there is no such thing, except after scheduling. For most optimizations, the chain of dependencies is enough. Not all. Loop transforms become more complicated, making regions of code that are uninterruptible (e.g. fully initializing an object before it can be see by the GC) is tough, and a few other things.<p>Overall I would say that TurboFan's main problem was that did not relax effect edges and it tried to introduce speculation too late and tried to that in the sea of nodes representation. It would have been a better design to do some optimizations on a CFG representation prior to the heavy lifting in optimizations that work on the sea of nodes.<p>One of TurboFan's good architectural decisions was to separate operators from the node representation, so that reasoning could be somewhat independent of how nodes represent dataflow and effects, but it looks like that got junked in favor of the class-based organization (<a href="https://github.com/v8/v8/blob/main/src/maglev/maglev-ir.h" rel="nofollow">https://github.com/v8/v8/blob/main/src/maglev/maglev-ir.h</a>) which is pure 90s tech lifted straight from C1 and Crankshaft. When I see an IR that's 11K lines in a header, I find it astonishing. Pity, that 11K knot isn't just self-contained, it will replicate itself over and over and over in the compiler and make a big mess in the end.<p>I think the main part of the V8 blogpost I agree with is that the sea of nodes is difficult to debug, especially for big graphs. I don't see any way around that except a whole crapton of testing, better tools, graph verifiers, etc. There's a learning curve to any compiler, and complex compilers have complex failure modes. Still, I think some people on the V8 team just always hated the sea of nodes and blamed all of their problems on it. It didn't help that all of the senior people who developed expertise with the IR moved on.</p>
]]></description><pubDate>Tue, 14 Apr 2026 15:29:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47766945</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47766945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47766945</guid></item><item><title><![CDATA[New comment by titzer in "Franklin's bad ads for Apple ][ clones and the beloved impersonator they depict"]]></title><description><![CDATA[
<p>Sorry, <i>they</i>--i.e. Franklin computer.</p>
]]></description><pubDate>Tue, 14 Apr 2026 13:07:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=47765182</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47765182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47765182</guid></item><item><title><![CDATA[New comment by titzer in "Franklin's bad ads for Apple II clones and the beloved impersonator they depict"]]></title><description><![CDATA[
<p>Read the article. He copied the BIOS code straight up, including the copyright notice itself. That's blatant copyright infringement.</p>
]]></description><pubDate>Tue, 14 Apr 2026 12:42:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47764911</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47764911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47764911</guid></item><item><title><![CDATA[New comment by titzer in "This year’s insane timeline of hacks"]]></title><description><![CDATA[
<p>The idiocy out of the Whitehouse is an intentional strategy to flood the zone with crap that sucks all the air out of the room. They have intentionally broken the ability of the public to become informed through a number of means: attention atrophy, lowest-common-denominator mudslinging, and massive, manufactured, stupid global crises. People have become deaf and desensitized.<p>The fact that humanity sent people back to the moon barely even registered. Crazy times.</p>
]]></description><pubDate>Mon, 13 Apr 2026 15:26:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47753393</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47753393</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47753393</guid></item><item><title><![CDATA[New comment by titzer in "We May Be Living Through the Most Consequential Hundred Days in Cyber History"]]></title><description><![CDATA[
<p>> Cisco’s private GitHub was cloned.<p>From this,<p><a href="https://www.sdxcentral.com/news/cisco-source-code-breach-leaks-ai-projects-and-aws-credentials/" rel="nofollow">https://www.sdxcentral.com/news/cisco-source-code-breach-lea...</a><p>It sounds like they were/are using GitHub to host company-private source code, presumably of high-value.<p>While it's hard to know exactly the setup (e.g. maybe they are running their own instance of GitHub internally), this is your reminder that public clouds are not secure, no matter how much you pay the maintainers of said clouds.<p>Internal network compromise is of course always possible, but sheesh, it sounds like this list has lots of public cloud failures.</p>
]]></description><pubDate>Mon, 13 Apr 2026 15:23:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47753353</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47753353</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47753353</guid></item><item><title><![CDATA[New comment by titzer in "Intel 486 CPU announced April 10, 1989"]]></title><description><![CDATA[
<p>For me, the 486 was right between my (actually my Dad's) first computer, a 386, and my first personal computer (Pentium MMX). During those couple of years my friends had 486s and I was always jealous. I used to drool at the Best Buy catalog that came every Sunday in the mail.<p>Nowadays, 486 computers are getting rare and relatively expensive. CPUs themselves are 25, 30, 40, sometimes 50 bucks on eBay. Whole working systems are in the low hundreds, and fully working 486 laptops can fetch 400 or 500 bucks.<p><i>sigh</i></p>
]]></description><pubDate>Fri, 10 Apr 2026 14:12:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47718469</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47718469</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47718469</guid></item><item><title><![CDATA[New comment by titzer in "Project Glasswing: Securing critical software for the AI era"]]></title><description><![CDATA[
<p>We're going to have to put all the bad code into a Wasm sandbox.</p>
]]></description><pubDate>Tue, 07 Apr 2026 20:20:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47680846</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47680846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47680846</guid></item><item><title><![CDATA[New comment by titzer in "Project Glasswing: Securing critical software for the AI era"]]></title><description><![CDATA[
<p>It's partly the industry and it's partly the failure of regulation. As Mario Wolczko, my old manager at Sun says, nothing will change until there are real legal consequences for software vulnerabilities.<p>That said, I have been arguing for 20+ years that we should have sunsetted unsafe languages and moved away from C/C++. The problem is that every systemsy language that comes along gets seduced by having a big market share and eventually ends up an application language.<p>I do hope we make progress with Rust. I might disagree as a language designer and systems person about a number of things, but it's well past time that we stop listening to C++ diehards about how memory safety is coming any day now.</p>
]]></description><pubDate>Tue, 07 Apr 2026 20:19:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47680837</link><dc:creator>titzer</dc:creator><comments>https://news.ycombinator.com/item?id=47680837</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47680837</guid></item></channel></rss>