[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] 6.1 Exceptions needs examples

* John Cowan [2012-03-22 23:30] writes:

> Helmut Eller scripsit:
>> guard could avoid full continuations in (at least) two ways:
>> 1. When no cond-clause matches, guard re-raises the condition in the
>>    dynamic context of the guard form.  This is similar to Java's
>>    try-catch (+ the implicit re-throw).
>> 2. Evaluate the cond-tests in the dynamic environment of the original
>>    raise.  The advantage of this strategy is that it preserves the
>>    context of the error; which is useful for debugging.  This is similar
>>    to Common Lisp's HANDLER-CASE.
> #2 is trivially simulated by using `with-exception-handler` and putting
> the cond inside the handler.  The point of `guard` is that it packages
> up the necessary escape operation.

This is not what I meant.  As I already said in to Aaron: note that I
said the "cond-tests". Only the cond-tests are evaluated in the dynamic
environment of raise; the <expression>s of the matching cond-clause are
evaluated in the dynamic environment of the guard clause.

> If I had to choose, I'd prefer #1.  Note that if there is no else clause,
> the behavior is effectively #1. 

My example had no else clause, yet the behavior was not like #1.  That
example requires full continuations.

Or did you mean "if there is AN else clause"?  Then yes.

> A compiler or smart macro-expander
> could notice this and take advantage of it.

Yes, if the compiler can prove that one clause is going to match then
it can avoid full continuations.


Scheme-reports mailing list