Also ES6 is mostly a burden for JS implementations, not much of an opportunity. We have to invest some serious effort just to *maintain* previous performance as we're implementing ES6, and in some cases not even that is possible.
On Fri, Mar 4, 2016 at 3:49 PM, 'Andreas Rossberg' via v8-users < v8-users@googlegroups.com> wrote: > There is no refcount in JS implementation, and no affordable way to > discover aliasing dynamically. And given the gazillion intersession and > mutation points in JavaScript's semantics, it is also practically > impossible to analyse aliasing at compile time, in all but the most trivial > cases. Note also that the callback itself may have or acquire references to > the same object as A and look at them during the execution of map itself. > > On 4 March 2016 at 15:34, 'Robert Eisele' via v8-users < > v8-users@googlegroups.com> wrote: > >> Sounds reasonable, but wouldn't it make sense to make this pattern >> matching based on internal references (plus refcount) instead of >> variable-name matching? That would solve the issue probably. >> >> Above that, I agree that the limiting factors are based on function calls >> if it's implemented in a naive way. However, I think ES6 gives a huge >> opportunity introducing a lot of high-level semantic information, which can >> be used to infer what the user wants and execute it much faster. So even if >> the user writes down a function call, it can be a simple loop inside of v8. >> I thought it's already done this way, when I heard ES6 became much faster >> recently. >> >> On Friday, March 4, 2016 at 11:34:51 AM UTC+1, Jakob Kummerow wrote: >>> >>> On Thu, Mar 3, 2016 at 7:48 PM, 'Robert Eisele' via v8-users < >>> v8-u...@googlegroups.com> wrote: >>> >>>> Hi, >>>> >>>> I wonder if v8 is able to optimize the pattern >>>> >>>> A = A.map(x => ~x) >>>> >>>> In this case v8 can work on the array instead of creating a new object >>>> and replacing it with the original array. >>>> >>> >>> Counter-example: >>> var A = B; >>> A = A.map(...); >>> // B must not have been modified >>> >>> You can make these as complicated as you want: >>> var B = [1, 2, 3]; >>> (function(A) { >>> A = A.map(...); // How can this .map() call know that B exists? >>> })(B); >>> >>> In general, it's pretty much impossible to tell whether there are any >>> additional references to an object somewhere; the only exception is when >>> the object has just been allocated in the current function. >>> >>> Also, on the scale of machine instructions, the overhead of a function >>> call is pretty large, which affects many of the Array builtins like .map() >>> and .forEach(). In many real usage scenarios, that might not matter, >>> because the arrays in question are small enough and/or the callbacks >>> themselves expensive enough that call overhead doesn't make much of a >>> difference. But when you micro-benchmark simple cases like "A.map(x => >>> ~x)" vs. "for (var i = 0; i < A.length; i++) { A[i] = ~A[i]; }" for a >>> couple million elements, you'll see a pretty big difference, and the >>> majority of that will be caused by the function calls. >>> >>> >>>> Is such a behavior already implemented? >>>> >>> >>> No, because it's complicated, and the benefit is somewhat unclear. We >>> might be able to optimize some patterns in the (distant) future. >>> >>> >>>> Thanks! >>>> >>>> -- >>>> -- >>>> v8-users mailing list >>>> v8-u...@googlegroups.com >>>> http://groups.google.com/group/v8-users >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to v8-users+u...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> -- >> v8-users mailing list >> v8-users@googlegroups.com >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to v8-users+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > -- > v8-users mailing list > v8-users@googlegroups.com > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to the Google Groups > "v8-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.