Communicating sequential processes for Javascript (like Clojurescript core.async, or Go).
var csp = require("js-csp");
Pingpong (ported from Go).
function* player(name, table) { while (true) { var ball = yield csp.take(table); if (ball === csp.CLOSED) { console.log(name + ": table's gone"); return; } ball.hits += 1; console.log(name + " " + ball.hits); yield csp.timeout(100); yield csp.put(table, ball); } } csp.go(function* () { var table = csp.chan(); csp.go(player, ["ping", table]); csp.go(player, ["pong", table]); yield csp.put(table, {hits: 0}); yield csp.timeout(1000); table.close(); });
There are more under examples directory.
This is a very close port of Clojurescript's core.async. The most significant difference is that the IOC logic is encapsulated using generators (yield
) instead of macros. Therefore resources on core.async
or Go channels are also helpful.
js-csp requires ES6 generators.
Earlier versions of Firefox either had ES6 generators turned off, or supported only old style generators.
Run with --harmony
or --harmony-generators
flag. Check support using
node --v8-options | grep harmony
Turn on an experimental flag. Look for "Enable Experimental JavaScript" at chrome://flags.
Use one of the js-to-js compilers:
--language_in ECMASCRIPT6 --language_out ECMASCRIPT3
flags.Or, if you use Python's Twisted: https://github.com/ubolonton/twisted-csp
Or, if you want a better language: https://github.com/clojure/core.async
It's available for both npm
and bower
. For browsers, use browserify+npm
or browserify
+bower
+debowerify
.
Pre-built files for (old) browsers may be coming.
yield waitFor
that either returns a value or throws an error from the result channel.yield
s (yield*
) affect composability.Distributed under MIT License.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4