A new release, minty2009-02-18-2.tar.gz, is available from the downloads section. This is still very alpha and doesn't yet generate code. It supports a subset of the R6RS core language only: no modules, no macros, and only a few primitives. OTOH, the code itself is R6RS and has been tested successfully with 4 different implementations. Many improvements have been made, esp in the inliner and letrec handling.
Minty has been rewritten in R6RS and is now hosted by Larceny, Ikarus, PLT and Ypsilon.
Other changes include temporary removal of macro and module support pending rewrites, and improved inlining and letrec implementation.
Hygienic macro language implemented
Began using define-datatype (caught many bugs with this)
New record types for representing code trees (using define-datatype)
Compiler exception handling and unit testing
Petite Larceny hosting (breaks with each new PL release)
Finally, work on the macro processing begins!
This should have been done from the start, but it took me a long time to study and understand hygenic macro processing, so I defered that feature of the compiler. Unfortunately, it has a huge impact on the structure of the semantic analysis code, so that needs rewriting.
The good news is that this is all progressing smoothly.
The code generator is now operational and using the Guile API for the runtime, in order to save time. The inliner rewrite went well, so the lambda lifting stage should be given some attention soon. Then perhaps the unit testing can begin.
The inliner is currently being rewritten. As this is the backbone of the compiler, many other parts are also being rewritten. However, the main work is on the inliner. The CPS transform used to preceed inlining, but now it'll follow it.
So the structure will now be: Parser -> Semantic Analysis -> Inlining -> CPS transform -> Closure Analysis -> Lambda lifting -> Code generation. The inliner will therefore process the AST in Direct Style instead of Continuation Passing Style. Also, the inliner is now using implicit continuations instead of explicit. Scheme features like call/cc should make the explicit style unnecessary.... read more
Record ops are now represented in the AST, allowing the inliner to optimise records directly. Factorial now residualises to the following code.
(seq (seq (minty:display-fixnum 120 2)
(minty:display-char (minty:integer->char 13) 2))
(minty:halt))
An alpha version of the compiler has been prereleased. At this point, the only output is diagnostics that vaguely resembles code. No runtime library or unit tests are included yet.