Re: threads & dynamic environment & continuations
shivers@xxxxxx 12 May 2000 02:58 UTC
It is well understood in the SML/NJ community (which has been grabbing
continuations, dealing with dynamically bound exceptions, and hacking
threads for > 10 years), that the dynamic environment is *part of the
continuation*. So throwing to a continuation discards the current
dynamic environment, and installs the one packaged up with the
continuation to which we are throwing. CALL/CC grabs the dynamic
environment at the point of call and packages it up when it builds the
reified continuation.
This tops it off. Do you know how call/cc-continuations made it into Smell
of New Jersey? Thru Bruce Duba, who with Dan and me had studied call/cc and
interactions with the dynamic environment for four or five years in
Indiana. If he had written his d'n dissertation, everyone would know where
this stuff comes from. Instead he put callcc into this monstrosity of a
so-called language, and gave these guys the funnest part of Scheme to play
with. And you know what? Unless one of us reviews their papers, they don't
even acknowledge what we knew before they were born-again call/ccers. They
have added nothing to our knowledge baout call/cc. I even gave the type to
Griffin. Mentioning them here is .... hm, insulting. :)
Hey, it's not like I wasn't around when call/cc was put into Scheme! I think I
can vaguely recall (only now that you have mentioned it in detail) you telling
me the story of this transfer path a while ago. I didn't recall it when I
wrote the above, tho. Interesting!
I also agree with Marc on values. Throw them out. Now. They screwed up
spidey so bad, it's not funny.
You know, I *like* multiple values. You can't throw them out unless you throw
out multiple parameters, too! ML (1/1) or R5RS (n/n). The middle ground (n/1)
is inconsistent; it's sitting down between two stools.
I like mv's because they can be passed back in the registers -- no consing of
intermediate data structures. I like 'em because the run time & static type
checkers can give you help -- your client won't mistakenly rip apart some list
that *wasn't* a "multiple value." I like 'em because they are symmetric with
the multiple parameters of LAMBDA.
However, this is a (fun) flamefest that should be moved off of the SRFI-18
list onto comp.lang.scheme. Shame on you, Marc, for salting your moderation
of this review discussion with such tantalizing bait!
-Olin