Hello Guile developers, Despite the long gap since my last email, I have in fact been working on the compiler project. This email has two purposes: first, to make sure that I have a basically reasonable design before I work more, and second, to ask a logistical question.
First of all, I very much appreciated your suggestions of things to read. I did look at the Reasoned Schemer. I also spent quite a while studying Stalin (the compiler), because I believe that is the current fastest Scheme compiler. (And therefore, it's the one I'd like to beat with our compiler.) The design I am currently working with is the same as Stalin's design. It is a propagation network. Basically you have a graph of Tree-IL nodes, where each Tree-IL node is connected to its parent, its children, and optionally other nodes (a variable is connected to the place it was declared. A primitive function is connected to the error continuation it could jump to). The compiler propagates information along the edges of this graph, attempting to find the minimum set of possible values for each variable and each jump target. It also performs partial evaluation as a special case of this. What I have described also seems to be how Hindley-Milner type inference works (although I think we can do a bit better than standard Hindley-Milner systems). Does this seem like a good design for the static analyzer portion? One big oversight that I know of is that this doesn't do any sort of specialization. I think that is an extremely important feature, but when I looked at doing specialization I thought that it would use all of the logic this would, but require a bit more work to keep the complexity down, so I thought I should do this first. I haven't thought much about the rest of the compiler yet, but I imagine you can basically walk this graph and try to choose representations for each piece of it using the information you gathered in the analysis phase. The key ingredient for that will be a library of representations for each Tree-IL node. The second part of this post is a logistical question. I would like to do this work in public, so other people can see it (and hopefully contribute). Where is the best place to do this? Should I make a branch on Savannah? That makes the most sense to me, but it seems a bit unnatural, since this project is very separate from the rest of Guile. And finally, a fun thing. The current best Scheme compiler (that I know of) is called Stalin. Therefore, I suggest that our compiler be called "Stallman", after our fearless leader (whose name also starts with "s"). :-) Thanks a lot, Noah