Hacker News new | ask | show | jobs
by scott_s 5560 days ago
Except I've only made it through the introduction, and I'm still not clear on whether or not their technique implies a compile, execute, profile, re-compile cycle.

One major difficulty with academic articles is that they have to "sell" their contribution in order to get the paper accepted. This entails taking the approach to its logical extension, and talking up the impact it can potentially have. Otherwise, reviewers may reject it for not being novel enough. But, this sort of approach is often detrimental to understand what, exactly, the researchers actually did. I know that when I read a research paper, there's often an "aha" moment when I realize "Oh, they just took XYZ and did ABC to it" which can either be followed up with "that's lame" or "that's neat!"

1 comments

I'm pretty certain its role is that of a transformer from programs in an intermediate language to optimized programs in that same intermediate language. Hence, a pipeline internal to a compiler.

The use of the word "traces" may be the source of your confusion in light the rise of tracing JITs (there that actually execute a program). I think a better word would be "abstract interpretation".

These are the passages from the intro that made me say that:

"So a supercompiler does not transform the program by steps; it controls and observes (SUPERvises) the running of the machine that is represented by the program; let us call this machine M,. In observing the operation of M1, the supercompiler COMPILES a program which describes the activities of M1, but it makes shortcuts and whatever clever tricks it knows in order to produce the same effect as M1, but faster."

"A supercompiler would run M, in a general form, with unknown values of variables, and create a graph of states and transitions between possible configurations of the computing system. However, this process (called driving) can usually go on infinitely."

This implies, to me, a compile, execute, profile, re-compile cycle. But, that conflicts with the understanding of the technique that I described above. If that does not describe a compile, execute, profile, re-compile cycle, then I'd like to know both what, exactly, the author meant by the above, and why he chose to phrase it as such.

Keep in mind the date (and origin) of the paper -- expect some vocabulary mismatches.

In particular: "run M, in a general form, with unknown values of variables" would probably be called abstract interpretation today.

(I'm only fudging because I haven't read the rest yet myself. :)

Edit to add something I forgot to mention, but should: There's a(t least one) useful PDF of slides in the repository from the originally linked project.

I did go through that, in something of a hurry -- it walked through the rewriting of a naive function to append 3 lists [ app3(a,b,c) = app2(app2(a,b),c) ]into one that executes with a single pass.