You can’t really program everything to use big blocks of virtual memory that are file backed. And you can’t program everything to be cache oblivious.
So is the only real solution to implement naive solutions until they’re slow and test them until they’re not?
That would be sort of a sad way to write software, but perhaps it is the only true way, since it’s the most widely applied and pragmatic practice.
Further, if all of this really is true, which I’m sure it is, then APIs and languages have not caught up, not developers.
Because we’re all still writing software with what’s provided to us, and last time I checked, we didn’t have access to black box caching implementation details, or direct access to L1, L2, L3, etc.