Fuzzing and other techniques may be able to cause all sorts of crashes and memory corruptions in the jit compilers code or in the generated code. This issue may have just been amplified by the extra complexity in the massive amount of LLVM C++ code added.
This is less of an issue for llvm when used as a static compiler, but as a jit on untrusted code, I don't know.
Time will tell, but I wonder if Rusts memory safety will make it a better candidate for implementing advanced JIT engines that process untrusted code than C++ like in LLVM.
Everyone is optimizing the hell out of their Javascript engines right now -- the question is whether some jit that's cobbled together independently of any other codebase is going to be intrinsically superior to a compiler that's being used for lots of other things (obviously there are arguments in both directions, right?). Is it better to simultaneously support Javascript via V8 (which has tiered optimizations of its own), Dart both via compilation to Javascript and its own independently optimized runtime, and NaCl? Is it better to have Javascript and asm.js?
Your trusty Apple II will be immune to modern malware thanks to the simplicity of not being able to connect to the internet, run 32-bit software, or have more than 48kB of memory. Of course the Apple II did have at least one virus.
(NB. it isn't necessarily the case that Rust makes writing correct code easier, but features like ADTs and pattern matching seem like they would be useful for such things.)
LLVM is interesting in that it's far less mature as a JIT than as a static compiler. I think using llvm as a browser JIT specifically may raise the bar for how the LLVM people need to consider security in the code.
Though that being said, compilers are already some of our most critical and trusted code.
But to be consistent with the web's development, such risks should not be considered in advance (this would spoil the fun, after all!), but bolted on in vendor specific ways as an afterthought (so that the vendors can be continued to be ridiculed for their incompetency, which makes "full-stack-engineers" feel warm and fuzzy).
What they don't allow third parties to do is JIT compile. The "execute writeable pages" entitlement is only allowed to Safari and in iOS 8 WKWebViews.
So your bigger point stands -- third party browsers all need to use a single JS implementation if they want to have the speed of a JIT.
I think I prefer a single trusted implementation by Apple to N implementations by whoever wants to give it a shot.
"Performing well" in this case still means significantly slower than Firefox does on the same code:
http://arewefastyet.com/#machine=12&view=breakdown&suite=asm...
Which isn't to say that it's not a big improvement over where it was. But there's still a way to go on making it competitive, so far as I can see.
Edit: Got name of the original engine wrong.
I'm also interested in how asm.js could be improved in this regard without moving away from its existing barebones model. Would love to hear ideas.
I think the first thing we will see is shared array buffers between workers because games really need that.
Dropbox's Pyston seems to have it this round.
Will Rubinius get any more substantial improvement? It seems to be in maintenance mode rather then development mode.
"Your current account (@gmail.com) does not have access to view this page. Click here to logout and change accounts."
Will we finally see cross platform Javascript mobile apps that runs like native apps?