David Herman wrote:
We've given this quite a bit of time, and I don't know how far we're going to 
get in understanding all the details of your proposal. But I think I can 
address some of my disagreements.

1) I'm skeptical whether the requirement you stated of future-proofing code for 
async implementations is likely to happen, and in fact, I think it would be 
harmful. Take your example: someone writes an Arrayish API, and maybe it's 
concurrent, maybe it's not, maybe it changes to become concurrent at some 
point. So a client writes:

    ...
    function push3() {
        arrayish.push->(3);
    }

Whoever uses push3 now has to be aware that it may or may not happen 
concurrently, so they have to be concurrency-safe too. Otherwise they might be 
tempted to do:

    push3();
    var x = arrayish.pop(); // this is gonna be 3, I'm sure of it!

and sadness would ensue. You're proposing making it easier to create mutable 
concurrent (or possibly-concurrent) data structures. Greasing the wheels of 
shared-state concurrency is dangerous and not a good idea for ES.

Yes, a good example of how this proposal doesn't compose.  Suppose push3 
returned an object which the caller needed:

   ...
   function push3() {
       arrayish.push->(3);
       return someComputation();
   }

var r = push3();
var x = arrayish.pop(); // this is gonna be 3, I'm sure of it!

How would you get something like this to work?

2) I don't fully understand why you have so much machinery around chaining 
continuations. There are two ways in which chaining happens in existing code: 
nested flows through host-API callbacks (expressed in CPS), and explicit 
composition. With first-class continuations, the former is already alleviated 
for free-- there's no need for additional machinery to wire together pieces of 
the continuation. And if you represent captured continuations as functions, you 
still get composition on the cheap with good old function composition.

Ditto.

3) I'm also unsure what you mean by "preserving causality" or "preserving 
stacks"

Me too.

5) We should also aim for a design that tries to be compatible with existing 
API's, so that people don't have to write wrappers for all the standard 
libraries. As much as possible, anyway.

Yes, that bothers me too.  I'd want a simple continuation, not a continuation 
that takes a continuation parameter.


6.  If I understand it correctly, another issue I see is that this 
transformation causes an exponential code size blowup in situations like the 
following:

while (condition0) {
 if (condition1) x = a->(x);
 if (condition2) x = a->(x);
 if (condition3) x = a->(x);
 if (condition4) x = a->(x);
 if (condition5) x = a->(x);
 if (condition6) x = a->(x);
 ...
}

   Waldemar
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to