
Task.js: Beautiful Concurrency for JavaScript - DanielRibeiro
http://taskjs.org/
======
pyalot2
In python we've been having a yield statement for a long time. By far and
large, it has not solved the issue of cooperative multitasking. Using it only
leads to near incomprehensive code where everything becomes an iterable, and
every call becomes an iteration.

Co-routines solve cooperative multitasking. Which is why they're now being
discussed for python in a fashion that doesn't rely on C-stack hacks.

~~~
lucian1900
I would say it has almost entirely solved the problem. Twisted with
inlineCallbacks makes writing multitasking programs very clear and obvious.
Python 3.3 makes it even better by allowing `return` and requiring less
wrapping with `yield from`.

Implicit stack coroutines (like greenlets) can always be built on top if
necessary, but they tend to require horrible things like monkey patching to
work together with existing synchronous, blocking code.

~~~
denik
> Implicit stack coroutines (like greenlets) can always be built on top if
> necessary, but they tend to require horrible things like monkey patching to
> work together with existing synchronous, blocking code.

that's not true. monkey patching is an optional feature that you can use with
greenlet-based libraries, but you don't have to.

compare that to inlineCallbacks, where you don't have that option.

------
derefr
Huh; I wonder if a slight tweak to this could be used to make yield act like
Erlang's receive operator? Presuming the library assigns every task a handle
(a PID), that tasks could .send() messages to other tasks, etc., .receive()
could be implemented by the library just expecting you to yield a set of
patterns, then blocking your task until the library has a message to route to
it that matches one of those patterns.

~~~
fzzzy
Yep. I wrote some code a few years ago that does this. I wrote it before I
knew about task.js and should rewrite it using task.js, removing my handrolled
clone of it.

<https://github.com/fzzzy/pavel.js>

There is also another slightly different scheduler that I started that
includes a multithreaded scheduler with webworkers and works in a browser.
This version, because it is designed to work in stock browsers, has a callback
api and does not use generators, but task.js could easily be layered on top.

<https://github.com/fzzzy/actors.js>

Please excuse the use of an explicitly provided "pattern" string in both of
these. I did it for simplicity. It would be possible to port my concept of
shapes from my python-actors project to js, but the runtime overhead of using
explicit strings is extremely low and it makes the code very simple.

------
mrspeaker
I wish Chrome would start implementing some of the ES6 stuff (especially arrow
function syntax...mmmm): does anyone know where we can see that kinda status?

~~~
just2n
Check the Chromium blog and their bug tracker.

If this were implemented, it would be hidden behind the experimental JS flag
anyway.

------
ger_phpmagazin
This is a year old. Now what?

