Honestly, same. I spend most of my time on Lobste.rs, private blogs, and chat communities rather than HN for this reason. I check in every so often out of habit and can catch some business news here or there...but the joy, growth, and curiosity have moved to smaller bastions specifically to avoid the slop and its glorification.
I had avid and resolve doing the same... I guess we just die instead of working with a proper pipe or telling the tool to also save an XML for emergencies. You will have failures like that with every tool especially in editing and VFX.
Lego's original moat was their patent. This expired in the 80s, and so their new moat became their manufacturing tolerances. None of their competitors could match the quality of their product. This lasted until about the 2010s when clone brands in China finally caught up, and coincidentally, Lego's own quality started slipping. Thus, they needed a new moat, and the choice was obvious: licensing.
I wish Lego would find a digital equivalent as universal as the bricks for programming. I think it could be another moat for them. But it seems they keep changing it and it does not seems as simple or as universal as it could be. I am thinking more programming with blocks than using a tablet etc. to program the blocks. IMO it is a wasted opportunity.
I've ordered 2 sets off of AliExpress (the Stargate BC303 and BC304 MOCs) and was quite impressed. No box, digital instructions, and a few minor color swapped pieces; but complete and everything went together very well.
I like this article a lot but it doesn't answer the question of "Why SSA?".
Sure, a graph representation is nice, but that isn't a unique property of SSA. You can have graph IRs that aren't SSA at all.
And sure, SSA makes some optimizations easy, but it also makes other operations more difficult. When you consider that, plus the fact that going into and out of SSA is quite involved, it doesn't seem like SSA is worth the fuss.
So why SSA?
Well, it turns out compilers have sequencing issues. If you view compilation as a series of small code transformations, your representation goes from A -> B, then B -> C, then C -> D and so on. At least, that's how it works for non-optimizing compilers.
For optimizing compilers however, passes want to loop. Whenever an optimization is found, previous passes should be run again with new inputs... if possible. The easiest way to ensure this is to make all optimizations input and output the same representation. So A -> B is no good. We want A -> A: a singular representation.
So if we want a singular representation, let's pick a good one right? One that works reasonably well for most things. That's why SSA is useful: it's a decently good singular representation we can use for every pass.
While iterating optimizations is nice, I think you missed the main point of SSA.
SSA makes dataflow between operations explicit; it completely eliminates the original (incidental) names from programs. Because of that, all dataflow problems (particularly forward dataflow problems) get vastly simpler.
With SSA you can throw basically all forward dataflow problems (particularly with monotonic transformations) into a single pass and they all benefit each other. Without SSA, you have every single transformation tripping over itself to deal with names from the source program and introducing transformations that might confuse other analyses.
I know we teach different compiler optimizations at different stages, but it's really important to realize that all of them need to work together and that having each as a separate pass is a good way to fail at the phase ordering problem.
And going further with the sea-of-nodes representation just makes them all more powerful; I really do recommend reading Cliff Click's thesis.
It's funny, I've been working on a CPS (continuation passing style) graph optimizer loosly based on Cliff Click's thesis and when I show it to the robots they're like "yeah, that's academic fluffery, it'll never fly" to try inflate my ego a bit until I explain how it actually works then they're "wait, that's actually possible ...and a good idea".
His 'optimization as a constraint solving problem' thing is actually pretty powerful and it just so happens I've been fiddling with a Projective Dynamics constraint solver (which is what the VM is for, to define the constraints) whivh I can abuse to optimize CPS graphs so... take that Robots!
You're very correct but I suppose I was really answering why compilers centralize around SSA. It's a bold choice to choose one data structure for everything, and that requires more motivation than, "it makes certain optimizations really easy". Because again, it makes other stuff harder.
>And going further with the sea-of-nodes representation just makes them all more powerful; I really do recommend reading Cliff Click's thesis.
We might have to agree to disagree on this one. I actually found sea of nodes to be a boneheaded idea. It makes one or two optimizations a little more elegant but everything else a huge pain in the ass. At least, that was my experience.
A huge benefit of the sea of nodes representation, at least how I envisioned it and we implemented in the early days of TurboFan, is that branch folding, load elimination, and all of the other forward dataflow analyses that do monotonic reductions can be combined into a single pass that operates on the IR in the optimal order and can iterate to a fix point efficiently.
In particular one thing that needs to be stated is that the primary alternative to SSA is CPS (continuation passing style) transformation. The two are roughly equivalent (at least in so far as both can be used to build compilers for the same languages), but with CPS you have to do more work to avoid ending up with lots of closure allocations that are really not necessary, so SSA feels more natural. I like to think about CPS though.
Phi-functions and block arguments are just different views of the same thing. Sometimes it is more convenient to use one or the other when thinking of a problem.
If you lay out phi-functions and their parameters on a grid, you'd get a "phi-matrix" where
phi-functions are rows and block arguments are the columns.
If you don't do an out-of-SSA transform before register allocation, and effectively treat block parameters like function calls then you're pushing the complexity to the register allocator.
An out-of-SSA transform before register allocation would coalesce not just registers but also variables in spill slots (thus avoiding memory-memory moves), it would reduce the complexity of parallel moves. A more advanced transform could also hoist moves out from before the hottest branch which could potentially lead to un-splitting previously split critical edges.
Keep in mind that the ruling party has massively powerful surveillance systems at their fingertips. It's hard to say how things will unfold, but being a dissident may not be in one's best interest.
> being a dissident may not be in one's best interest.
I agree, if you're not a fan of democracy, you might not want to be a dissident in the current American environment. If you are, then you most likely want to be a dissident, otherwise it'll slowly disappear before your eyes, and you'll be too late to be able to change it soon.
If you're in the latter camp, learn how to protect and hide yourself rather than becoming apathetic because you're afraid of the consequences.
Monolithic ruling classes are the political scientific equivalent of spherical cows. The richer model (still spherical, but maybe incorporating drag) is that of elite constituencies.
> being a dissident may not be in one's best interest
If we’re going imperial, dissident status is less risky than being poor. Practically every autocratic transition in history has involved a massive wealth transfer up, together with the dismantling of expensive social safety nets.
"“We’re going to have supervision. Every police officer is going to be supervised at all times, and if there’s a problem, AI will report that problem and report it to the appropriate person. Citizens will be on their best behavior because we are constantly recording and reporting everything that’s going on.”" - Larry Ellison (Oracle).
Larry is the 4th richest person, worth more than the GDP of Ukraine.
It seems like there is a winner-takes-all opportunity here to me. Since many of the billionaires in the US have made the decision to align with Trump, if many of the states unify and can overthrow the government, they also stand to separate the billionaires from their wealth.
The Federal American government looks like it's playing a dangerous game -- or at least makes the assumption that individual states within it will be unable to mount a concerted response. With inflation and unemployment rising, and hundreds of thousands of federal workers out of jobs, it's possible state governments may become radicalized.
They've been packing the court for decades now, a concerted push since the W Bush era. That's not even a discussion anymore.
remember not the debacle that was Kavanaugh boofing, and being gropey as hell in the past, and crying? or Amy Comey Barret's complete lack of qualification in any way?
Or how Chief Justice Roberts got appointed basically on the idea that he's going to approve and reinforce Hobby Lobby and Citizen's United?
I remember playing that game once. The vast majority of the chat messages were some variant of, "I need a boy" or "I need a girl", meaning they were looking for dates. I guess boyfriend and girlfriend were banned, but boy and girl weren't. It was hilariously bad.
reply