This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
I am currently implementing exception handling in Kawa, and I have
some questions about similar features in Guile. Specifically,
I am looking for a high-level Scheme interface that does not
require call/cc, and I would prefer to implement something
compatible with Guile and/or other Scheme implementations,
rather than design my own.
The Guile reference manual describes catch and throw.
Are these interfaces considered stable? Or are any changes
planned?
There is one feature I fail to see the point of:
Key may also be the value `#f'. In that case, THUNK takes one
argument which will be passed a "jump buffer object". A jump
buffer object may be used as the key argument to `throw' to throw
to a specific `catch' without an intervening search for a symbolic
key.
Assuming you have a gensym function that returns an unique symbol,
am I right in believing that:
(catch #f THUNK HANDLER)
is equivalent to:
(let ((jbuf (gensym))) (catch jbuf (lambda () (THUNK jbuf)) HANDLER))
If so, then it seems like a feature that fail to justify the extra
conceptual complication to catch. (I can implement it easily enough.
It is just very ugly, in a type sense.)
The Scheme repository includes one "Proposal for Exception Handling in Scheme"
-see http://www.cs.indiana.edu/scheme-repository/doc.proposals.exceptions.html.
This proposal (which I believe matches MzScheme) looks implementable in Kawa
without too much trouble. However, it assumes the MzScheme convention
for "parameters" as 0-or-1-adic functions, which I don't particularly
care for, and it does not look like it would fit well with either
Guile or Kawa.
--Per Bothner
Cygnus Solutions bothner@cygnus.com http://www.cygnus.com/~bothner