On Jun 23, 2011, at 12:31 PM, Axel Rauschmayer wrote: >> This is entirely beside the point. >> >> Dynamic |super| as Sean proposes requires *every call site* to pass the >> |here| parameter or something derived from it, no way around that. >> >> Paying for 'super' if you use it, buying by the yard, is not a problem. >> >> Making *every function call* in the language slow, increasing register >> pressure, etc. -- absent aggressive inference to identify callees and >> specialize call sites to them (inlining VMs do this but it can backfire, so >> there will be a default case that can't do this) -- is a big problem. > > I believe you about the dynamic super. I can summarize my question as follows: > - Making "super" or "current object" available to a function incurs costs. If it is statically bound (via a [[Super]] or [[Current]] internal property then there is only a cost (and a small one) on actual accesses of super. EG, Object.defineMethod(obj,'foo", function() {return super.foo() /*cost to access [[Super]] + cost to access this */});
If dynamically bound (on each property lookup of the method) then there is a cost on every function call to pass the current object reference to the function invocation. This cost is in addition to the const of passing thethis reference. > - Making "current function" available to a function does not incur costs? > This is *not* an extra parameter, then? the current function is made available via the function name in a function declaration: var q= -1; Object.defineMethod(obj"foo",function bar(a,b,c) {return q*bar.length /* returns -3 */}); bar is a lexically scoped binding just like q. No per call perimeters are involved. The cost to access bar is approximately the same as the cost of accessing q (exact costs subject to details of how lexically scoped access is implemented) Allen _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss