Generation of async callbacks at transpilation time, from simple blocking logic, into callback-hell.
Async Transform
Using WebWorkers directly requires you define functions for postMessage and onmessage, split your JavaScript into two files, and load libraries in the worker with importScripts. Only low-level-chumps think dealing with these API's directly is a good idea. All these API details are easily abstracted away with syntax inspired from Golang. One of the best things about Golang is the message passing syntax: it makes code more readable, and it prevents a library-war by having this syntax builtin.
result1 = <- mychannel print result1 result2 = <- mychannel print result2
The code above gets the result of mychannel that computes something in a WebWorker. This requires waiting for the result, so if written directly by hand in JavaScript, you would need to write a mess of async callbacks. Rusthon automatically translates above into async code, and deals with routing messages to each channel.
__workerpool__.recv( mychannel, function (result1) {
console.log(result1);
__workerpool__.recv( mychannel, function (result2) {
console.log(result2);
});
});
Channel Select Syntax
Select syntax inspired by Golang, works pretty much the same as Golangs select statement.
for i in range(n):
print 'trying to select on workers'
select:
case res = <- worker1:
show('case-worker1:' + res)
case res = <- worker2:
show('case-worker2:' + res)

