ASYNCS
Means ubobstructive
Getting important
– Ajax
– Resource management
– Node.js I/O
Hard to write in pure JavaScript
THREE SEQUENTIAL TASKS IN JAVASCRIPT
taskA(function(){
taskB(function(){
taskC(function(){
finish()
})
})
})
KEY PROBLEMS
Nested functions!
– My screen is narrow
Hard with loops
Hard with abstraction
Code locality is broken
EXAMPLE: TASKS DEFINED IN A LIST, ACT IN ORDER
var tasks = […];
var actTasks = function(tasks, deploy){
var current = 0;
var act = function(){
tasks[current]();
current ++;
if(tasks[current]) deploy(act)
}
deploy(act)
}
actTasks(tasks, function(f){ setTimeout(f, 1) });
THAT IN EISA
var flow = async {
for var task in tasks:
wait! 0;
task()
end
}
flow()
EISA IS
A new language
– So, no capacity requirements
JavaScript targeted
Designed for interactive developments
– So, asyncs
ORIGIN: GAME MAKING
Defining game data – Optimized syntax for DSL
Game flow – Asyncs
Large scale RPGs – Module system
Now is general-use
DEMO IN ACTION
var loadImage(src, callback):
……
img.onload = function(){ callback img }
img.src = src
end
var loadTextures = async {|callback|
var texture = getTextureData loadImage! 'images/texture.png'
……
if callback:
callback { texture: texture, heightMap: heightMap }
end
};
MASTER FLOW
var flow = async {
……
setTextures loadTextures!()
……
gameClock.perk()
while true:
renderFrame();
……
gameClock.wait!()
end
console.log 'Demo Finished'
}
HOW ABOUT USING TRADITIONAL WAY?
var flow = function(){
loadTextures(textureLoaded)
}
var textureLoaded = function(textures){
……
gameClock.perk()
gameLoop()
}
var gameLoop = function(){
renderFrame();
gameClock.wait(gameLoop)
}
TREND
ECMAScript Harmony
– Syntax extensions
– Semantic fixes
JavaScript-targeted languages
– From existing languages, e.g. GWT
– New-created languages, e.g. CoffeeScript
JavaScript modulation
– Necessaria – module system in Eisa