Stratified JavaScript
croczilla.com
croczilla.com
It transforms this:
doSomething();
hold(timeInMs);
doSomethingElse();
Into this: doSomething();
setTimeout(function() {
doSomethingElse();
}, timeInMs);
Basically, it uses code transformation to transform "synchronous" code into "asynchronous", callback-based code. The previous example isn't too bad, but if one starts adding many more callbacks, code can quickly become much more unreasonable. Worse still, it gets painful to refactor synchronous code into asynchronous code and back. Stratified JavaScript attempts to handle this slow, largely mechanical work for you.It's not actually this simple, though--the javascript is actually compiled down to a representation that is executed by the Oni (http://www.croczilla.com/oni) runtime.
It also appears to allow one to "suspend" code at the callback breaks, passing it around as a continuation and resuming when required.
I would say this effort is broadly similar to the delimited continuations support in Scala 2.8. See http://www.scala-lang.org/node/2096.
A@B follows both branches A and B simultaneously and, as soon as either one of them returns, it cancels the other one. Cancellation means that the 'losing' branch gets a chance at cleaning up after itself (close sockets, remove ui, etc) and then gets abandoned.
(Disclaimer: I work on SJS)
<script type="text/sjs"> ... </script>
block, which is parsed and compiled into native javascript. It allows you to write asynchronous javascript using straight forward syntax. e.g. pause execution (hold), split code into parallel tasks, split code and automatically join when one branch finishes (function @ function - think search), and suspend/resume code using events.It's very cool and now I'm going to start looking for an excuse to use it.