Translation
Monday 20 February 2012
Broad browser compatibility is here now: the current versions of all the major browsers now work with AtomizeJS. The cost though is the translation tool.
In the end there was no choice: it has to be a server-side and/or
static translation of JavaScript, or just write to an extended API and
pay the cost up front. I had wondered about doing a dynamic
browser-side on-demand translation: after all, you should get the
source code of any given function with fun.toString()
. The problem
though is that after you've done the translation, you have to eval()
it back to a function, but now you're in a different environment. So
if you previously had:
var a = 5;
function myFun () {
return a;
}
then yes, you can get the source of myFun
and you can transform it
as necessary. But you can't then re-eval()
it back to a function
and have it capture the same value of a
as before: there's no way
to extract the bound variables the closure captured the first time in
order to re-present them to the eval()
.
So instead we have the translation tool, and yes, it's not ideal, and you may have to treat external libraries too (though actually I believe there probably won't be too many cases where that's necessary). The code you get back is readable and nicely formatted, and makes the transformations applied quite obvious. Most importantly, it's enough to show that this will work with older browsers and that the AtomizeJS itself is a viable technology for writing applications today.
Or at least that's what I think! As ever, feedback is very welcome.