1,037 karma · joined February 12, 2026
Ironically this is your preconceived abstraction of how a compiler has to operate. An ideal compiler could allocate registers differently for each called function: F1()->F2()->F3(), F1 uses r0-5, F2 uses r6-10, F3 uses r11-15, no register saving required in the whole chain. There's no need for a fixed ABI. Such a compiler would look very different from today's ones.
But it takes longer. It's more difficult. That's why the abstraction exists and is still very useful despite its limitations.
Result? When you have an intent in mind, it's hard to find the right button! In office 2003, you could click on the "insert" menu and every item there was something that would go into your document. If you're thinking "I want to add a picture" you can click on "insert" and scan through for picture-related items. (Blender does this too). In the 2007 ribbon model it would - well that one would probably be on the default visible ribbon because it's a frequent action - but what if you want to insert a table of contents? Who knows where that button is.
Once I tried writing an app in early windows style: inside the mouse down handler redraw the button as pressed, etc. Not setting the button state to pressed and triggering a redraw, but actually changing the pixels inside the handler. It's a huge layering violation but it's actually refreshing to cut through all the BS and make the computer just do the right thing, and it actually worked better most of the time than a modern framework app.
Right now it doesn't really affect me that Ableton Live is closed-source. But it would affect me if the main method of sharing music on the internet was Ableton Live project files. And if Ableton had cultivated that situation on purpose they would be weaponizing the closedness of their software.
go [] = ...
go head:remainder = ...
instead of hacking it together with a fold?Or, you know, any actual market. Where I can sell whatever I want from my stall but I can't sabotage other people's stalls.