News for hackers. Stuff that matters.
Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @05:10PM (#5419045)
Actual numbers from the Groups link at the bottom:

    So I discovered from Alan today - asm.js was everything I hoped it would
    be. 

    One of the more intensive examples in OpenSCAD
    (https://raw.github.com/openscad/openscad/master/examples/example006.scad)
    gave me these metrics:

    Native: 402 seconds, 
    asm.js version: 605 seconds, 
    asm.js version in Chrome: 3724 seconds

And the exciting part? Backwards compatibility even with IE6, forwards compatibility with optimizations that haven't been invented yet – and no 80s era blob+VM architecture in sight. All without inventing any half baked new language, file format, virtual machines or whatever else, and building on a language spec that's already an ISO standard. Eat your heart out Native Client!
Re:Asm.js in Firefox Nightly by nzonbi on Thursday March 21, 2013 @06:20PM (#5419613)
Taking a comment from someone on this thread, named xal:

asm.js is the hack of the year.

Because it makes simple, to get good performance.

Probably the biggest roadblock in software development, is the cost of complexity. Many great projects fail to be realized, because of the development costs. And development costs rise exponentially with complexity. Software development needs to become simpler. The success of simple and agile programming languages, like javascript proves that. Want to learn it ? just open just browser and type some code.

This is one huge step in the right direction. It makes very easy to get good performance, on the most ubiquitous platform, the web. It makes many things possible, at lower costs. And this is the same big reason why, a platform like firefoxOS has the potential to be awesome. Because it makes things simpler.

Now I wish that the same thing done here to javascript, were also done to html, CSS, the dom, etc. The web needs simpler bases. And modularity on top of it.

Re:Asm.js in Firefox Nightly by ux-app on Thursday March 21, 2013 @10:00PM (#5420891)
"Now I wish that the same thing done here to javascript, were also done to html, CSS, the dom, etc."

I agree 100%. If only we could see similar progress in the speed of DOM updates/manipulation life would be great. The fact is that most webapp performance issues aren't JS dependent, the bottleneck is the DOM.

Re:Asm.js in Firefox Nightly by pifflesnort on Thursday March 21, 2013 @05:52PM (#5419378)
I'm not sure why you think asm.js isn't a blob: in order to achieve those performance levels that you see in Mozilla, you have to interpret JavaScript as something that is not JavaScript, which requires having a spec in hand, dealing with potentially ambiguous encodings, and interpreting the asm.js as a bytecode, rather than as standard JavaScript.

At that point, the only difference between "asm.js" and a "blob" is that asm.js is unreadable ascii, which the blob is unreadable binary.

Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @06:05PM (#5419495)
But it's not, by your logic a compiler producing machine-generated K&R C in the late 70s would also be a blob.

Only as anyone mining the web for esoteric code will attest, anything written in standard C since probably the mid 80s and using only the ANSI C standard library can still be fed to a compiler today and produce perfectly functioning code, taking advantage of every advancement in compiler technology in the 30 years that have followed.

Those C source files do not, for example, make assumptions about Harvard/von Neumann architecture, stack layout, calling conventions, the presence or absense of SIMD instructions, and so on. C is called "high level assembler" for a reason, just as "asm.js" is called "asm.js" for a reason.

Even if we had some standard binary format for describing software available since the 80s, it would almost certainly lack sufficient descriptive power to capture constructs that could be vectorized, or otherwise transformed using more modern compilation techniques that simply didn't exist at the time. Lowering to a binary form throws all that semantic information away. And the more you add back the more the binary form starts to look like a pointless transformation of the original source code.

Then there is the idea that such a format could ever have been designed in the 80s that would have lasted us to present day. Native Client proponents and similar such "VM fundamentalists" are effectively claiming that we can invent such a format, when it has never been done before in the history of computer science.

(Pre-emptively rejecting boring VM counterexamples like Java for reasons that can be extrapolated from what I just described. Every comment on this thread brings it closer to HN's "controversiality" scoring penalty, and I'd very much like for this link to stay on the front page all day)

Re:Asm.js in Firefox Nightly by pifflesnort on Thursday March 21, 2013 @06:19PM (#5419602)
> But it's not, by your logic a compiler producing machine-generated K&R C in the late 70s would also be a blob.

Seeing as generated C is essentially unmaintainable and unsuitable to serve as a source language, then yes.

> Native Client proponents and similar such "VM fundamentalists" are effectively claiming that we can invent such a format, when it has never been done before in the history of computer science.

I'm confused. Asm.js is an ASCII bytecode. We have plenty of other examples of abstract bytecode throughout the history of computer science, but they tend to be binary, not ascii.

Other than asm.js using a silly encoding for backwards compatibility purposes, what's the difference?

> (Pre-emptively rejecting boring VM counterexamples like Java for reasons that can be extrapolated from what I just described)

Huh? Now I'm even more confused. Are you arguing against Java's virtual machine specification, the constraints of its bytecode as defined, or what?

Notably, Android converts stack-based Java bytecode to register-based Dalvik bytecode; it's not as if the JVM bytecode strictly defines all conventions in an immutable way, or even that asm.js is all that different in practice.

I wanted to address this one last, since it's a bit of a tangent, but it demonstrates the issues of "architecture agnosticism" fairly well:

> Those C source files do not, for example, make assumptions about Harvard/von Neumann architecture, stack layout, calling conventions, the presence or absense of SIMD instructions, and so on.

That's not exactly true. If pure C is output, then yes, this is the case. In reality, especially with Harvard and modified Harvard architectures, one must take into account architecture differences to achieve reasonable performance, especially on the hardware as developed in the late 70s.

For example, there is often limited RAM, in which case one might want to store data in program space. However, C pointers do not, in any standardized way, support annotating the memory space (program, data) in which they live, and code itself can not necessarily portably extract data from program space as to operate on it as if it was in data space.

So, for a Harvard architecture, you often either wind up writing non-portable C, or you deal with inefficiencies -- some of which may not be possible to overcome, as there's only so much RAM or data storage to work with.

Re:Asm.js in Firefox Nightly by rayiner on Thursday March 21, 2013 @11:15PM (#5421181)
> Only as anyone mining the web for esoteric code will attest, anything written in standard C since probably the mid 80s and using only the ANSI C standard library can still be fed to a compiler today and produce perfectly functioning code, taking advantage of every advancement in compiler technology in the 30 years that have followed.

Have you ever actually tried this? It doesn't work.

Re:Asm.js in Firefox Nightly by tptacek on Friday March 22, 2013 @02:05AM (#5421612)
I have. When I started at Arbor Networks in the early 00's, we needed a fine-grained timer library that was millisecond-granular and could efficiently manage thousands of scheduled events. I stole mine from the MIT-licensed Athena codebase, which dates back to the '80s.
Re:Asm.js in Firefox Nightly by rayiner on Friday March 22, 2013 @10:39AM (#5423159)
But was it generated code? I've had pretty bad luck with old scheme/lisp implementations that compile to C.
Re:Asm.js in Firefox Nightly by coldtea on Friday March 22, 2013 @04:40AM (#5421913)
>I'm not sure why you think asm.js isn't a blob

Because it isn't? It's a perfectly normal set of semantics in a language form on top of regular JS.

>in order to achieve those performance levels that you see in Mozilla, you have to interpret JavaScript as something that is not JavaScript, which requires having a spec in hand, dealing with potentially ambiguous encodings, and interpreting the asm.js as a bytecode, rather than as standard JavaScript.

All of them observations that are BESIDE the point if asm.js is a blob or not.

Re:Asm.js in Firefox Nightly by Millennium on Friday March 22, 2013 @12:11PM (#5423840)
Actually, asm.js is JavaScript. That is, in fact, much of the point. It's kind of like the PyPy project's RPython: a restricted subset of Python that lends itself well to ahead-of-time compilation and optimization.

This leads to the question of whether (when?) someone will try to port Narcissus to it, potentially leading to a practical self-hosted JavaScript engine. "MonkeyMonkey", they could call it.

Re:Asm.js in Firefox Nightly by skybrian on Thursday March 21, 2013 @07:43PM (#5420195)
It's a blob that has excellent integration with a very well-known interpreted language with good tool support, including some nice debuggers. It looks like it will have a nice foreign function interface. Although not terribly readable, at least you don't have to learn a new assembly language when you really need to examine the object code, and you could easily edit the binary if it helps you debug something. Perhaps you can see the appeal?
Re:Asm.js in Firefox Nightly by masklinn on Thursday March 21, 2013 @05:17PM (#5419093)
> Backwards compatibility even with IE6

As long as the runtime is ignored though, if Chrome gets a 6x perf hit I can't even imagine how unusably slower IE6 would run.

Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @05:52PM (#5419372)
Perhaps for your OpenGL games, but for some business application originally written for VB4 that basically draws a bunch of forms and puts stuff in a database, that's more than fast enough for some compiler that took VB4 and turned it into JS.

This is basically the reason d'etre for NaCl as far as I can tell: it was at various points advertised as for games and other 'high performance' stuff, but the more probable commercial reason for it is to leverage companies on to a non-Microsoft platform through an easy migration path. So I think the hypothetical VB4 compiler comparison (or a million similar "business app migration" examples) is pretty fair.

[edit: per subsequent comment, the notion that GC somehow can't be implemented is nonsensical]

Re:Asm.js in Firefox Nightly by ahoge on Thursday March 21, 2013 @07:39PM (#5420173)
>the notion that GC somehow can't be implemented is nonsensical

http://asmjs.org/faq.html

"The asm.js model provides a model closer to C/C++ by eliminating dynamic type guards, boxed values, and garbage collection."

Sure, nothing stops you from emulating a complete CPU. Of course you can do anything.

However, how large will that JavaScript file be? Also, will it be fast enough to be usable?

Re:Asm.js in Firefox Nightly by stormbrew on Thursday March 21, 2013 @11:28PM (#5421220)
I think the difficulty of implementing GC would be the lack of access to stack primitives, something that would be impossible to provide in a way that was backward compatible.

By that I mean the ability to inspect the stack and determine the values present there and determine whether or not they point to 'heap' allocated memory.

Re:Asm.js in Firefox Nightly by EwanToo on Friday March 22, 2013 @06:09AM (#5422102)
From the asm FAQ, it seems like GC will happen:

Q. Can asm.js serve as a VM for managed languages, like the JVM or CLR? A. Right now, asm.js has no direct access to garbage-collected data; an asm.js program can only interact indirectly with external data via numeric handles. In future versions we intend to introduce garbage collection and structured data based on the ES6 structured binary data API, which will make asm.js an even better target for managed languages.

Re:Asm.js in Firefox Nightly by stormbrew on Friday March 22, 2013 @09:08AM (#5422646)
I took that to be actually talking about the other way around -- accessing JS GC'd objects from the asm.js code's heap and having it work correctly (which is currently onerous). I don't think that helps implement GC of the asm.js heap.
Re:Asm.js in Firefox Nightly by ahoge on Thursday March 21, 2013 @06:55PM (#5419877)
VB uses garbage collection. You can't compile it to the JS subset of asm.js.
Re:Asm.js in Firefox Nightly by whatshisface on Friday March 22, 2013 @12:45AM (#5421418)
That's like saying you can't implement python in x86... if it can run code, it can run code.
Re:Asm.js in Firefox Nightly by ahoge on Friday March 22, 2013 @02:38AM (#5421674)
You were able to do the same without asm.js.

Problem is, it's way too large and way too slow. People aren't doing these things because they simply aren't feasible.

If you could compile Python directly into that asm.js subset of JavaScript, things would be okay. However, emulating a whole CPU and running some Python interpreter on top of that won't be okay. Even if you would magically reach 100% of the regular speed, it just would be way too fat.

Re:Asm.js in Firefox Nightly by ahoge on Thursday March 21, 2013 @06:51PM (#5419856)
V8 is about 100 times (seriously) faster than IE6's JS engine. So, yes, "backward compatible with IE6" doesn't really mean anything.

After executing 5 million statements, IE will ask you if you want to continue. It will ask you many times. You'll probably sit there all day long clicking the whatever button.

Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @07:06PM (#5419961)
When the 'competition' is being advertised as an easy migration path for old software, then "backward compatible with IE6" means everything - it's just another way of measuring how much pain is involved in migrating some software over, only here instead of having to switch your entire corp and customers to Chrome, the change is mostly restricted to the developer toolchain.

You're continuing to perpetuate the notion that asm.js only has implications for high performance software, despite replying to a comment where I gave you a very real use case that has nothing to do with performance. And as I suspect you already know, since you seem knowledgeable, GC can easily be implemented in about a million different ways using an emulated heap on top of a typed array, so yes, even a naive implementation of VB4 could easily be made to work.

Re:Asm.js in Firefox Nightly by Millennium on Friday March 22, 2013 @05:00PM (#5425720)
It doesn't make IE6 any faster, but the code will still run. I suspect that's what they mean by "backward compatible": it can't work miracles, but will at least do no harm.
Re:Asm.js in Firefox Nightly by ahoge on Saturday March 23, 2013 @09:07PM (#5430585)
"Run". Yes, just ~600 times slower. At that speed it probably won't be very useful. You have ~50 msec for an operation which is perceived as instantaneous. If it takes 30 seconds (600 times as long), people will not use it. It simply isn't feasible.

This stuff is only ES3 compatible because it didn't need anything from ES5. A low-level compiler target doesn't need any of these things: http://kangax.github.com/es5-compat-table/

Re:Asm.js in Firefox Nightly by coldtea on Friday March 22, 2013 @04:33AM (#5421900)
>if Chrome gets a 6x perf hit

Who said Chrome gets a 6x perf hit?

You just have the numbers with asm.js.

If Chrome hasn't been optimized for asm.js style code, then those numbers would either be what Chrome already achieves with JS (e.g plain old V8 speed), or slightly faster than regular JS (because of the more streamlined, easy to JIT nicely asm code).

Re:Asm.js in Firefox Nightly by masklinn on Sunday March 24, 2013 @04:33PM (#5433465)
You're missing the point. The current optimized-for-normal-javascript Chrome takes a 6x hit on asm.js code, compared to odinmonkey. That's kind-of crappy but it's not a killer, and it could get asmjs support (maybe, who knows). The fear I was talking about was browsers which are already much slower than Chrome , and have no chance in hell of ever getting asmjs support, hence the mention of IE6.
Re:Asm.js in Firefox Nightly by hderms on Thursday March 21, 2013 @05:18PM (#5419094)
Can you go into more detail about why you are glad there isn't a blob + VM approach? I know the long history of Java vulnerabilities, etc... but I'd be curious to hear what someone knowledgeable about the subject would say.
Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @05:26PM (#5419159)
It's easy to show. Imagine Gmail was written for and compiled with an IE3 or IE4 era Javascript parser/interpreter/compiler, and the result was distributed as a blob to run natively. Shortly thereafter Google goes out of business.

Now imagine the browser vendors finally figure out how to make languages like Javascript fast, only there is the small problem of 100 zettabytes of blobs on the web, written by companies that no longer exist, and that can't be optimized at all because it's all distributed in a form that resists any inspection.

We don't even use stacks any more – they were some daft hold-over of the 60s that lasted far too long into the 2040s. Only all those zettabytes of blobs were compiled with optimizations that target stack-based VMs.

That's the promise of Native Client.

Re:Asm.js in Firefox Nightly by cromwellian on Thursday March 21, 2013 @05:35PM (#5419234)
A highly obfuscated and minified JS application like GMail has about the same level of introspectability as Java bytecode. I have little problem consuming Java bytecode written 18 years ago by companies that went out of business.

Leaving aside binary format representation of portable VM code, there's also the issue that NaCl supports multithreading and asm.js doesn't. WebWorkers/Isolates are a poor substitute for high performance games.

Re:Asm.js in Firefox Nightly by niggler on Thursday March 21, 2013 @05:37PM (#5419253)
"WebWorkers/Isolates are a poor substitute for high performance games."

Have you tried? (genuinely curious)

Re:Asm.js in Firefox Nightly by fzzzy on Thursday March 21, 2013 @06:32PM (#5419683)
WebWorkers have also been recently enhanced so that it is possible to pass a message with no copy (by moving it out of the current WebWorker; it loses it's reference to the data).

I suspect taking advantage of this would greatly help in a game situation.

Re:Asm.js in Firefox Nightly by agilescale on Friday March 22, 2013 @09:44AM (#5422819)
What do you mean by that? Java bytecode is leaps and bounds more instrospectable, and by that, I mean that programs can actually garner useful information from it, otherwise tools like Eclipse's code completion woudn't work. The source won't be preserved, but the class, field and method names will. That's much better than what you get from minified JS. I also mean that, despite its unconvenience, Java's reflection API is still quite powerful.

I don't get the fixation with the fact that the filename ends in a .js extension; just because a bunch of code is in a familiar interpreted language doesn't make it readable or maintainable in any other manner.

Re:Asm.js in Firefox Nightly by pifflesnort on Thursday March 21, 2013 @05:50PM (#5419359)
Native Client also supports SSE on x86, and NEON on ARM.
Re:Asm.js in Firefox Nightly by hosay123 on Thursday March 21, 2013 @05:57PM (#5419414)
And will binaries compiled for Native Client today support SSE6 (released Q1 2014), ARMv15 (Q3 2016), and so on? Of course, if the authoring party still exists to recompile it, and they have a commercial reason for doing so..
Re:Asm.js in Firefox Nightly by pifflesnort on Thursday March 21, 2013 @05:59PM (#5419438)
This is a problem no matter what your target is.

Web apps written in 1997 do not take advantage of modern browser features.

Browsers written in 1997 can not render modern web pages.

At least with NaCL, you have the option of taking maximum advantage of the available hardware. I'd love to see NaCL grow into having actual on-chip support for NaCL-style sandboxing, the way we've seen CPU vendors add support for virtualization-specific extensions.

At the end of the day, I don't see this as a death blow for NaCL. Rather, it pushes us farther into a post-JS/HTML/CSS platform. We'll start seeing new languages take off, and the underlying platform target itself (browser, native, or otherwise) will matter less and less.

asm.js can be just another compilation target, along-side NaCL and iOS. Once you go in that direction, the HTML/JS/CSS monstrosity start to become less relevant outside of hypertext documents.

Re:Asm.js in Firefox Nightly by Millennium on Friday March 22, 2013 @05:15PM (#5425830)
That would be true if asm.js were just a faster interpreter, but it isn't. It's not even really a separate language: "use asm" is just a hint to the JavaScript runtime that the code follows a particular set of conventions that, it so happens, are very easy to optimize.

An asm.js-supporting runtime which sees this hint can run that code through a different compiler that takes maximum advantage of the available hardware (i.e. whatever it's running on, with the asm.js code doesn't need to know or care about). A runtime that doesn't support asm.js will just run the code like it did before.

My point is that asm.js is every bit as capable of fully optimizing for the host as NaCl. It has two big advantages over NaCl, though. One is that it's architecture-independent: the host knows what architecture it uses, and (assuming it has the compiler, which an asm.js-supporting runtime has by definition) can act accordingly, taking full advantage of its own features. The other advantage is that there's a fallback even in case the runtime doesn't support asm.js: it's no faster than ordinary JavaScript in this case, but at least it does no harm.

Re:Asm.js in Firefox Nightly by comex on Friday March 22, 2013 @12:54AM (#5421442)
> I'd love to see NaCL grow into having actual on-chip support for NaCL-style sandboxing

A bit off topic, but this already exists, in the sense that there is no difference between NaCl-style sandboxing and what every OS kernel already provides for its processes, except that NaCl is generally locked down tighter. All that would need to happen is for OSes to provide support for containers with arbitrarily restricted syscalls (as Linux already does) and NaCl could give up on the software fault isolation without any real loss in security.

Re:Asm.js in Firefox Nightly by zobzu on Friday March 22, 2013 @02:02AM (#5421608)
kernels provided this feature since forever. selinux, trustedbsd, you name it, provided this. seccomp on linux is just a "in code, per process" version, while selinux, or earlier things like RSBAC or LIDS provide more flexibility (but apparently, nobody understood how to use any of this in the past :)
Re:Asm.js in Firefox Nightly by pifflesnort on Friday March 22, 2013 @11:16AM (#5423433)
The major difference is that I can run a NaCL process(es) inside my own userspace process without kernel support, and that a failure in my sandboxing won't also be a failure inside the kernel.
Re:Asm.js in Firefox Nightly by kayoone on Friday March 22, 2013 @04:27AM (#5421891)
i also believe this to be true mostly for real apps and games. I dont see alot of benefits for normal web development though.
Re:Asm.js in Firefox Nightly by rayiner on Thursday March 21, 2013 @06:13PM (#5419555)
Re:Asm.js in Firefox Nightly by mtgx on Friday March 22, 2013 @05:16AM (#5421983)
ARMv15? Is that a new architecture after ARMv8? Do you have a link on it?
Re:Asm.js in Firefox Nightly by nnethercote on Thursday March 21, 2013 @08:27PM (#5420478)
It relies on typed arrays, so unfortunately it's not backwards compatible with IE6 :(
Re:Asm.js in Firefox Nightly by ux-app on Thursday March 21, 2013 @10:09PM (#5420929)
If I'm understanding things correctly, the JS produced is a subset of ES3. The use of typed arrays simply give supporting platforms an additional speed boost.

According to Brendan Eich: "all of JS (ES3) is 'universally supported' [by asmjs]"

Re:Asm.js in Firefox Nightly by surrealize on Friday March 22, 2013 @12:15AM (#5421341)
I'm reading Eich's tweet differently. Here's the twitter exchange:

https://twitter.com/BrendanEich/status/302897797827530752

=====

Alias Cummins ‏@no_other_alias

@BrendanEich So would I be right in thinking that the point of asm.js is to tie together all the universally supported bits of JS?

BrendanEich @BrendanEich

@no_other_alias No, all of JS (ES3) is "universally supported". http://asmjs.org/ is a no-GC-pause well-typed compiler target language.

=====

@no_other_alias is asking if asm.js is about formalizing a JS subset that's universally supported (in all browsers). Eich says no, all of JS (ES3) is universally supported (so no subsetting is required for cross-browser compabitility). Asm.js is about formalizing a JS subset that can be compiled to much faster machine code.

So I don't think Eich is making a claim about asm.js backward-compatibility here.

Re:Asm.js in Firefox Nightly by Millennium on Friday March 22, 2013 @05:18PM (#5425851)
Typed arrays are a background thing in this case. The code one writes in asm.js (or compiles to asm.js) doesn't mention them at all. IE6 will see the code and use normal arrays, because as far as it knows, that's the only kind of array there is.
Re:Asm.js in Firefox Nightly by hosay123 on Friday March 22, 2013 @07:01PM (#5426325)
Sadly not, I overshot the mark slightly here (what worse an advocate for your stuff than an incorrect advocate!). Typed arrays allow for things like casting, where the same chunk of 'heap' can be seen through multiple views, and interpreted as char* by one, and float* by the other.

It can't even be shimmed on IE6, since you can't overload the array indexing operator there.

It's entirely possible and easy to implement an extension/variant of Asm.js that could legitimately target these browsers, by providing shimmable names for the array indexing operation, but diminishing returns and all that..

Note nnethercote (parent comment) is one of Mozilla's engineering ninjas and author of Valgrind, it's pretty likely he knows what he's talking about here.

Re:Asm.js in Firefox Nightly by Millennium on Saturday March 23, 2013 @10:01AM (#5428132)
That's not what backward-compatibility means here. IE6 sees ordinary JavaScript code and executes it. It's true that it can't do the typed-array magic in the background, but it doesn't have to. The JavaScript code that IE6 sees has the same result as compiled asm.js code would; it just does it in a less-optimal way.

That's all that asm.js really is: a set of JavaScript coding conventions that (when followed) prove to be easy to optimize to near-native levels of speed, along with a compiler hint to tell the runtime that these conventions are being used. IE6 doesn't understand the compiler hint, but because the asm.js code is still valid JavaScript, it'll still run.

I suspect that either nnethercote and I are using different definitions of backward-compatibility, or nnethercote is mistaken as to what exactly asm.js is. Authorities are less likely to make mistakes, but they can still make them.

Re:Asm.js in Firefox Nightly by nnethercote on Wednesday April 03, 2013 @10:09PM (#5490533)
Typed arrays are an explicit JS feature: https://developer.mozilla.org/en-US/docs/JavaScript/Typed_ar.... There's nothing "background" about them.

None of IE 6, 7, 8 and 9 support them: http://caniuse.com/typedarrays. Ergo, asm.js won't work on IE 6, 7, 8 or 9.

(Speaking of authorities: I got this info from azakai, who's the author of Emscripten and one of the designers of asm.js.)

Re:Asm.js in Firefox Nightly by lucian1900 on Thursday March 21, 2013 @05:20PM (#5419109)
But it's terrible! Bytecode + VM would be so much better ...