ya! is a go-routine implementation in ES6 using generators and promises, inspired by task.js
A month ago I discovered Go language, a kind of modern C designed by Robert Griesemer, Rob Pike, and Ken Thompson inside Google and after passing the online tutorial I ended fascinated by go-routines and channeled communications.
In Go language a go-routine is any function launched by using the go keyword. Unlike co-routines, a go-routine has no explicit control over its execution and it is a runtime scheduler who is in charge of pausing and resuming routines. A go-routine is a green thread ruled by the go runtime.
In Go, communications between go-routines are made explicit by using channels (the communication model is based on Communicating Sequential Processes). A channel can receive or send data. When a go-routine is sending data to a channel but nobody is waiting for that data in the same channel, the go-routine blocks until someone consumes the data. The same happens when getting data and there is no data available.
Generators in JavaScript in addition to a simple scheduler enable this kind of collaboration and ya! is a library to emulate Go go-routines related features such as go-routines themselves, channels (buffered and unbuffered) and special Go statements like select (range is coming!).
You can find the library in bower under the name of ya.js and read the docs or see the annotated source on GitHub.
As an extra, here you have the go version of the dinning philosopher problem and the JS version using ya!
Seguir leyendo «ya! library for go routines in JavaScript (Next, ES6)»