Thu Feb 28 17:20:17 CET 2008
currently continuation marks are used to make some kind of scat
language trace through the code. basicly, i can put anything there i
want. it's reassuring that the basic mechanism is available. (also,
this idea is very related to some dynamic variable hack i tried in
PF.. don't remember if it's still there..)
something strange that i didn't know about exceptions: apparently the
handler is executed in the context of the 'raise' call! that explains
a lot. no.. this is not the case:
(define param (make-parameter 123))
(((lambda (ex) #t)
(lambda (ex) (printf "E: param = ~s\n" (param)))))
(printf "B: param = ~s\n" (param))
B: param = 456
E: param = 123
ok: i'm confusing the lowlevel 'handle' with the highlevel 'catch'.
the paper mentions how to implement 'catch' on top of 'abort', but
also talks about interference of prompts, and the use of tagged
prompts to work around that.
so the bottom line: exceptions and prompts do not collide, because the
prompt tag used to implement exceptions is not accessible. this does
mean that an exception can jump past any arbitrary prompt.
question: how does this work in sandbox? apparenlty sandbox re-raises
exceptions: see the internal function 'user-eval' in 'make-evaluator*'
in scheme/sandbox.ss : the value that comes from the channel is raised
if it's an exception.
something is still don't understand about mixing of prompts and
exceptions. if i don't wrap a prompt around the evaluation in
host/purrr.ss exceptions will terminate the program, so the prompt
seems to terminate propagation and trigger the printing of the
error. however, doing this down the chain in snot doesn't work like
a prompt with default tag wraps the toplevel, so the whole
continuation is also a partial continuation (upto that prompt).
hmm.. then i read this:
"The default prompt tag is also part of the built-in protocol for
exception handling, in that the default exception handler aborts to
the default tag after printing an error message."
note this says 'default exception handler'. so if there's one above
the prompt, that one will be called instead of the default handler.