The ever-resourceful wingo just completed a series of patches that enhances the abilities of Guile's syntax expander. Among other wonders, the semantics of the `@@' form have been extended to support arbitrary expressions. To wit:
(@@ (my-module) (my-expr))
...will evaluate -- but, more importantly, expand --
(my-expr)
in (my-module)
's
environment.
R6RS
I needed Andy's help with the above because, since last I
wrote, I'd gotten pretty far with my implementation of the
R6RS standard libraries for Guile. In fact, I'd pretty much
finished with them -- all twenty-five or so of them (minus
(rnrs bytevectors)
and (rnrs io
ports)
, which Ludovic Courtès had already taken on),
plus unit tests. And I got them (mostly) done in about one
grueling month. (Granted, a lot of them are just
repackagings of existing Guile functionality, but...)
Maybe this is how things always go. I spent about a year working on R6RS support in Guile: I was on the Acela back to New York City from the 2009 FSF Associate Members meeting when I started playing around with a naive form of the library-to-module transformer that wingo merged to `master' a couple of weeks ago; and spent the next eight months variously getting frustrated, learning `syntax-case', tweaking, and rewriting, before I got the code to the point where I could knock out all those library implementations in one shot.
And now they'll be in Guile 2.0, which is better than I'd hoped, even.