It really was the last go-round! Neil checked in the Scheme
side of my SRFI-18
implementation early this morning, capping off almost eight
months of revisions (and a 75-message-long discussion thread
on guile-devel
). That duration is a comment
not only on the complexity of the specification and the
depth of the changes required, but also on how rough the
original patch was: I didn't fully understand Guile's
threading system at the time, much less the rhythm of
interactions such as the ones between individual threads and
the garbage collector. So thanks are due to Neil and
Ludovic for being nice about things the whole time and
helping me get the thing marginally polished. There are
undoubtedly bugs -- including, apparently, some kind of
deadlock that can show up during make check
,
but the majority of the work is done.
...Which means it's in, now, and if you're developing with the 1.9.0 series, you can start using it. Like I've said before, I think SRFI-18 is pretty important -- a development platform having a robust and standards-compliant threading implementation is crucial to being able to develop applications of any real complexity on it. Hopefully this will make Guile more attractive to developers and make it less difficult to port standards-dependent projects like Snow to it.
SRFI-89
I spent some time cooking up a translation layer to convert
SRFI-89
optional/keyword argument specifications to the format
already supported by Guile's (ice-9 optargs)
module. Unfortunately, that module has some
incompatibilities that I don't think are surmountable (e.g.,
all required arguments must be passed before any of the
optional/keyword ones or the argument-binding system gets
confused). Fortunately, Marc Feeley's spec includes a
reference implementation that might be usable in a drop-in
way. Disappointing that I can't use my convoluted (but more
compact) approach, but maybe that's for the best.