[plt-scheme] R6RS exception handling and dynamic extent [was: SXML for R6RS]

From: Robby Findler (robby at cs.uchicago.edu)
Date: Thu Jul 10 11:30:28 EDT 2008

On Thu, Jul 10, 2008 at 10:28 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> At Thu, 10 Jul 2008 10:11:41 -0500, "Robby Findler" wrote:
>> On Thu, Jul 10, 2008 at 10:08 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>> > At Thu, 10 Jul 2008 10:00:42 -0500, "Robby Findler" wrote:
>> >> I think I'm missing some earlier important part of this conversation
>> >> and I wonder if it could be said again for others who might be like
>> >> me?
>> >>
>> >> Why is guard causing problems (when combined with continuable
>> >> exceptions, etc)?
>> >
>> > Both `guard' and `with-handlers' jump out to the dynamic extent of the
>> > `guard' or `with-handlers' form to check whether they want to handle a
>> > given exception. At that point, if the right way to handle the
>> > exception was to continue without jumps, then it's too late.
>> >
>> > As specified by R6RS, `guard' will at least jump back in to try further
>> > handlers --- but that facet of `guard' isn't in our implementation.
>> Oh, right, I see.
>> Would it be possible to have guard just not jump out,
> It should jump out for the same reasons as `with-handlers', right?
>> and for
>> with-handlers to either signal an error or not handle continuable
>> exceptions or something like that?
> Yes, if you do that for `guard', too, then it avoids the problem.
> That's essentially un-merging the mechanisms for continuable and
> non-continuable exceptions (or at least un-merging them enough).

I think I'm proposing that the unmerging happen at the
guard/with-handler level. So, if someone wants to use R6-style
continuable exceptions, they should use guard and things will work as
the R6 editors envisioned. If, on the other hand, they want to have
their handlers invoked in the dynamic extent of the handler itself,
they use with-handlers, but at the price of not having continuable

Is that a reasonable compromise?

We could go further and not have with-handlers in the scheme or
scheme/base language and require someone to really write an R6 program
if they wanted that behavior. There is a real interop problem here, of
course, that I'm not sure how to deal with.


Posted on the users mailing list.