We worked on both the theory and ab-straction, building up methods thatwere analyzable and could be reasonedabout, and implementing them. I in-sisted in this project that, if someoneon the systems side showed me a pieceof code, I would say, “Can you describethis in a paper? How would other peo-ple know about this?” If they were onthe theoretical side, I would say, “Canyou implement it? Show me the imple-mentation.”The idea of trying to change a pro-gram into a functional program wassomething that I was trying to push.We could do much better analysis evenfor just plain straight optimization ifwe could name the values but not bur-den it with the location, apply a func-tional paradigm to it.

we could trace that idea back to yourearly work on strength reduction, whenyou were making hash names for inter-mediate values.

Yes. The value contributes to the
answer, but where that value resides
should be irrelevant to the writer of the
program.

apparently, just convincing the early
programmers of that was one of your
early successes. foRtRaN is good
enough; you don’t need to keep track of
every single machine register yourself.

That’s right. So I had that challenge
out there. We needed to try and recast
the program as close as we could to
functional.

Another thing I think was a very big
step was not only identifying parallelism, but identifying useful parallelism.

Another problem: say that one of the
optimizations is constant propagation.
For some variable deep in the code,

that was a problemwe struggled withearly on: how doyou avoid redoingthe analysis?