Regarding (1), as far as I'm aware, the requirements are flexible, but the general requirement
is "published a paper at a good venue, either journal or conference". This implementation
was a hobby project of mine, but I was hoping to be able to justify spending more time on it
by finding a venue to publish it at.
As for (2), it's mostly expository. The techniques that I am interesting in showing off have no
known "simple" implementations as far as I'm aware -- scalar evolution, polyhedral
compilation, some kinds of inter-procedural analyses, SSA, etc. do not have simple
implementations. Indeed, the goal is to show how to write optmising compilers. Most
compilers books teach one how to write a compiler, while there's a second course usually on
compiler optimisation. I don't know of readable, clean implementations of, say, the SSA
construction algorithm, or the scalar evolution analysis.
Regarding nanopass: I think it makes a lot of sense as a philosophy as a way to architect
compilers. However, there are a lot of nice haskell-isms to write compilers which are
scattered throughout the literature, as far as I can tell: Hoopl, trees that grow, much of
Matt might's work on abstracting abstract interpreters, Scrap-your-boilerplate style techniques,
equality saturation, etc. which are all fantastic, but I've never seen them under the
same umbrella.
So that's a sketch of the general story I want to tell :)
Thanks.
~Siddharth