He actually quotes my rebuttal comment - "“Except, uh, a lot of people have applications whose profiles are mostly flat, because they’ve spent a lot of time optimizing them.”<p>and his response is "this view is obsolete, and to the degree it isn't, flat profiles are dying".<p>Oh great, that's nice, i guess i can stop worrying about the thousands of C++ applications google has built that display this property, and ignore the fact that in fact, the profiles <i>have gotten more flat over time</i>, not less flat.<p>Pack it up boys, time to go home!<p>Basically, he's just asserting i'm wrong, with little to no data presented, when i'm basing mine on the results of not only thousands of google programs (which i know with incredible accuracy), but <i>the thousands of others at other companies that have found the same</i>. I'm not aware of him poring over performance bugs for many many thousands of programs for the past 17 years.
I can understand if he's done it for his open source programs (which are wonderful, BTW :P)<p>He then goes on to rebut other comments with simple bald assertions (like the luajit author's one) with again, no actual data.<p>So here's some more real data: GCC spent quite a while optimizing interpreter loops, and in fact, did a better job than "the experts" or whatever on every single one it was been handed.<p>So far, as far i can tell, the record is: If GCC didn't beat an expert at optimizing interpreter loops, it was because they didn't file a bug and give us code to optimize.<p>There have been entire projects about using compilers/jits to supplant hand-written interpreter loops.<p>Here's one: <a href="https://code.google.com/p/unladen-swallow/wiki/ProjectPlan" rel="nofollow">https://code.google.com/p/unladen-swallow/wiki/ProjectPlan</a><p>While the project was abandoned for other reasons, it produced 25+% speedups over the hand written interpreter versions of the same loop by doing nothing but using compilers.<p>Wake me up when this stops happening ....<p>He then goes on to make further assertions misundertanding compiler authors and what they do:"A compiler will not change an implementation of bubble sort to use mergesort. ... they only take responsibility for machine-specific optimization”.<p>This is so false i don't know where to begin. Compilers would, if they could, happily change algorithms, and plenty do.
They change the time bounds of algorithms. They do in fact, replace sorts.
Past that, the problem there is not compilers, but the semantics of languages often do not allow them to safely do it.<p>But that is usually a programming language limitation, and
not a "compilers don't do this" problem.<p>For example, the user may be able to change the numerical stability of an algorithm, but the programming language may not allow the compiler to do so.<p>Additionally, it's also generally not friendly to users.<p>As an example: ICC will happily replace your code with Intel performance primitives where it can. It knows how to do so. These are significant algorithm changes.<p>But because users by and large don't want the output of ICC to depend on Intel's Math Kernel Library or anything similar, they don't usually turn it on on by default.<p>GCC doesn't perform quite as much here, because even things like replacing "printf" with "puts" has caused tremendous amounts of annoyed users. Imagine the complaints if it started replacing algorithms.<p>Past that, i'd simply suggest he hasn't looked far enough into the history of optimizing compilers, because there has been <i>tons</i> of work done on this. There are plenty of high level language optimizers that have been built that will completely rewrite or replace your code with rewritten algorithms, etc.<p>I stopped reading at page 50.