Concurrency support?
Neil Mix
nmix at pandora.com
Mon Jun 26 17:16:23 PDT 2006
On Jun 26, 2006, at 4:12 PM, Brendan Eich wrote:
> If this were 1995, *and* we had a sound library mechanism with the
> right identity and security guarantees, I would agree. But at this
> point I agree with Lars: "ECMAScript needs to be a rich language
> with features that are immediately useful to its core audiences,
> and which play well with each other in the sense that they have
> unsurprising consequences when composed."
I'd like to think of myself as a member of the "core audience" (I
have no formal PL theory background, I've been hacking web apps my
entire career, I've never designed a language, and Wikipedia is the
only reason I'm able to keep up -- albeit minimally -- with this
discussion). I have to say, I believe this feature *is* immediately
useful, and (perhaps this is my naivety talking) I believe it can
avoid surprising consequences if done correctly.
Does the distinction between canonical continuations and "delimited
continuations" matter at all? If we drop canonical continuation
support (which is a good idea IMO) and focus instead on delimited
continuations, and furthermore concede that native calls are not
allowed in the delimited portion of the stack (which I think is
reasonable -- I'm not really sure how they'd show up there anyway),
isn't this reasonably doable? Granted, the tiny tree-walking parser
can't rely on host recursion. And granted, figuring out the right
syntax for including the delimited stack as a parameter to the higher-
up stack frames is a bit treacherous (especially since this is
relatively new territory).
OTOH, I think the nature of JavaScript with it's callback-based APIs
makes it ripe for this kind of enhancement. Keep the simplicity of
onReadyStateChange, setTimeout, addEventHandler et al., and yet
provide a concurrency mechanism that is IMO a very natural (nay,
expected) way to tie things together. When I first started using
JavaScript 5+ years ago, I was looking for a concurrency mechanism
(even though I didn't know enough to call it "concurrency") within a
month of starting my first project. I was astonished to find that
none existed. For the past 6 months or so I've been slowly teaching
myself PL theory (in my spare time) so that I could take a stab at
solving this problem by building a code generator (also in my spare
time). I didn't do this to be cool or l33t, I honestly did it so
that the next time I build a JS app I'll be able to use a concurrency
mechanism, so that my code is easier to follow and the asynchronicity
doesn't drive me batty. (too late, most would say ;)
When I researched for my code generator I found postings all over the
web from people seeking concurrency in JS. Many of them didn't have
the vocabulary to describe it (just like me 5 years ago), but they're
out there. So I think I disagree with the assertion that this isn't
useful to the core audience. Whether it's doable in an unsurprising
way I'm less certain of, but I'm still naively optimistic.
-Neil
More information about the Es4-discuss
mailing list