I think Saulo indeed managed to reverse engineer the correct answer,
and, to save future questioners from the same detective work, I've added
a description in Section 8.6 of the manual. (Its compiled PDF version
will go up on the web with the next Ur/Web release.)
Thanks, Benjamin, for pointing out this documentation hole.
On 08/21/2016 07:13 PM, Saulo Araujo wrote:
Hi Benjamin,
I believe that, besides sleep, only the functions rpc and recv also
trigger context switches. If you look into the source code of the
Ur/Web JavaScript runtime (urweb.js), you will see that there is a
boolean variable called maySuspend, which says when context switches
are allowed and the only functions that check the value of maySuspend
are sl (sleep), rc (rpc) and rc (recv).
Sincerely,
Saulo Araujo
On Sat, Aug 20, 2016 at 5:25 PM, Benjamin Barenblat <[email protected]
<mailto:[email protected]>> wrote:
The threads demo* explains that ‘Ur/Web [client code] uses cooperative
multi-threading, not the more common preemptive multi-threading. Only
one thread runs at a time, and only particular function calls can
trigger context switches. In this example, sleep is the only such
function that appears.’ What other functions can trigger context
switches?
* http://impredicative.com/ur/demo/threads.desc.html
<http://impredicative.com/ur/demo/threads.desc.html>
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur