You can disagree with anything if you're allowed to change the terms of the 
discussion. :)

Brendan said JS is run-to-completion, which means that if you call a function 
and control returns to you, no intervening threads of control have executed in 
the meantime. But then you changed his example to this:

> //#1
> assert_invariants();
> function callBack () {
> assert_invariants(); // perhaps yes, perhaps no. There's no guarantee.
> };
> setTimeout(callBack, 1e3);
> return;

Now matter how you line up the whitespace, the semantics of a function does not 
guarantee that the function will be called right now. When a programmer 
explicitly puts something in a function (the function callBack here), they are 
saying "here is some code that can be run at any arbitrary time." They are 
expressing that *explicitly*. Whereas in a semantics with 
fibers/coroutines/call/cc:

> //#2
> assert_invariants();
> f(); //might suspend execution
> assert_invariants(); // perhaps yes, perhaps no. There's no guarantee either.
> return;

the mere *calling* of any function is *implicitly* giving permission to suspend 
the *entire continuation* (of the current event queue turn) and continue it at 
any point later on, after any other threads of control may have executed.

If you want to claim these two things are equivalent, I feel pretty confident 
predicting this conversation will quickly descend into the Turing tarpit...

Dave

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

Reply via email to