[racket] raise vs abort

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Thu Jan 6 08:29:55 EST 2011

On Thu, Jan 6, 2011 at 7:18 AM, Keiko Nakata <keiko at kurims.kyoto-u.ac.jp> wrote:
>> I'm not completely clear, but I think the only point is that 'raise'
>> does not, in general, actually abort. It calls a handler that makes
>> the decision to abort or not. When aborting actually happens, however,
>> abort is what does the aborting.
>
> Hmm. If I understand, you are saying that 'raise' is a function
> call with dynamic binding for the function.

I looked over the docs again, and I see that I was talking about the
world before call-with-exception-handler. So please disregard.

> I have been also thinking
> a way to rationalize Racket's behavior of control operators
> capturing and installing exception handlers; your view might be consistent
> with this behavior too. I have to think about it more.
>
> Still I am not certain that this behavior of 'raise' cannot be implemented
> by other (delimited) control operators. And, probably I do not still
> understand why 'raise' has to be a primitive.
> At least, I'm not fully clear about it.
> (For the moment I ignore the barrier, as it looks more like a contract
> which guarantees some consistency.)

Probably you can get very close if not exactly there if you implement
call-with-exception-handler at the same time.

If you wanted to try, I'd suggest adapting the redex model and then
using random testing to try to find the difference.....

> I hope my email makes sense...

Yeah, it does. Now that I'm no longer confused. :)

Robby


Posted on the users mailing list.