On 13 September 2011 09:33, Brendan Eich <[email protected]> wrote: > > You are simply way out of date on JS optimizing VMs, which (based on work > done with Self and Smalltalk) all now use "hidden classes" aka shapes and > polymorphic inline caching to optimize to exactly the pseudo-assembly you > show, prefixed by a short (cheap if mispredicted) branch. > > What's more, SpiderMonkey bleeding edge does semi-static type inference, > which can eliminate the guard branch. > > Please don't keep repeating out of date information about having to "seek > through a dictionary". It simply isn't true.
True. On the other hand, all the cleverness in today's JS VMs neither comes for free, nor can it ever reach the full performance of a typed language. * There are extra costs in space and time to doing the runtime analysis. * Compile time is runtime, so there are severe limits to how smart you can afford to get in a compiler. * A big problem is predictability, it is a black art to get the best performance out of contemporary JS VMs. * The massive complexity that comes with implementing all this affects stability. * Wrt limits, even in the ideal case, you can only approximate the performance of typed code -- e.g. for property access you have at least two memory accesses (type and slot) plus a comparison and branch, where a typed language would only do 1 memory access. * Type inference might mitigate some more of these cases, but will be limited to fairly local knowledge. * Omnipresent mutability is another big performance problem in itself, because most knowledge is never stable. So despite all the cool technology we use these days, it is safe to assume that we will never play in the performance league of typed languages. Unless we introduce real types into JS, of course. :) /Andreas _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

