I just saw that node.js/nan also uses Callee() so we should try to figure out a way to keep it
On Fri, Dec 11, 2015 at 11:20 AM Enrico Pertoso <[email protected]> wrote: > I'm reverting in the meantime. > > > On Fri, Dec 11, 2015 at 11:15 AM, Toon Verwaest <[email protected]> > wrote: > >> If embedders don't want to have multiple Callees instantiated from the >> same FunctionTemplate, Jochen's solution works. If that's the case, they >> could also just mark the function-template as caching, and "reinstantiate >> the template" in the context. That will return the cached function without >> needing to install it on data. >> >> On Fri, Dec 11, 2015 at 10:57 AM Enrico Pertoso <[email protected]> >> wrote: >> >>> I think Jochen's solution would be better in the long term. Keeping >>> Callee() and instantiating a FunctionTemplate if it gets called seems >>> slightly more complex. >>> >>> In the meantime, should I revert the change (marking Callee as >>> deprecated or deprecate soon)? >>> >>> On Friday, December 11, 2015 at 8:48:22 AM UTC+1, Jochen Eisinger wrote: >>> >>>> One alternative to using Callee for functions you created yourself is >>>> specifying the data parameter which is passed via >>>> FunctionCallbackInfo::Data >>>> >>>> Data could be an External that points to a data structure holding a >>>> weak Global pointing back at the function. >>>> >>>> Would that work for you? >>>> >>>> On Fri, Dec 11, 2015, 8:41 AM Toon Verwaest <[email protected]> >>>> wrote: >>>> >>> The difference is that FunctionTemplates are (supposedly) unique for the >>>>> entire isolate, whereas JSFunctions are instantiated per native context. >>>>> So >>>>> if you use multiple realms (iframes in a browser setting), you'd be >>>>> getting >>>>> multiple Callees (jsfunction) for the same callback (FunctionTemplate). >>>>> >>>>> Preallocating all of those is expensive memory-wise and in terms of >>>>> context-initialization. Getting to all-can-read accessors (jsfunction from >>>>> the accessing context rather than the installed accessor) is either >>>>> expensive performance-wise while accessing; or makes the memory and >>>>> initialization issues even worse. >>>>> >>>>> My thinking now is that we could hide the cost inside of >>>>> info.Callee(), by instantiating the FunctionTemplate in the current >>>>> (accessing) context if the value passed in was null or some other >>>>> sentinel. >>>>> That makes it slightly more expensive for regular templates (the null >>>>> check), and quite a bit more for lazy instantiated templates that access >>>>> Callee. The latter should just not be used in that scenario... >>>>> >>>>> On Thu, Dec 10, 2015, 23:25 Alex Kodat <[email protected]> wrote: >>>>> >>>>>> That makes great sense to me and would be much appreciated. Though >>>>>> I'll admit I don't really understand what it means to call a >>>>>> FunctionTemplate. I guess for C++ code there really isn't any containing >>>>>> JS >>>>>> scope so the distinction between Function and FunctionTemplate is kinda >>>>>> (largely?) meaningless? >>>>>> >>>>>> >>>>>> On Thursday, December 10, 2015 at 1:25:38 PM UTC-8, Toon Verwaest >>>>>> wrote: >>>>>> >>>>>>> The reasoning behind this change is that in the future we'll have >>>>>>> FunctionTemplates that can be called through accessors without even >>>>>>> allocating the JSFunction. Registering the last called value isn't >>>>>>> possible >>>>>>> in that case... >>>>>>> >>>>>>> Perhaps rather than fully getting rid of the parameter we should >>>>>>> change the API to pass undefined if there is no closure. In that case >>>>>>> the >>>>>>> FunctionTemplate would need to be instantiated manually through the API >>>>>>> to >>>>>>> get to the callee. >>>>>>> >>>>>>> Wdyt Enrico? >>>>>>> Toon >>>>>>> >>>>>>> On Thu, Dec 10, 2015, 20:59 Alex Kodat <[email protected]> wrote: >>>>>>> >>>>>> Sorry if this would have been more appropriate on v8-dev but just >>>>>>>> downloaded the latest and greatest 4.9 commit and discovered that >>>>>>>> Callee is >>>>>>>> no longer available in FunctionCallBackInfo. While I'm sure there was a >>>>>>>> good reason for this, my sample size of one embedder registers one >>>>>>>> "ouch". >>>>>>>> Dunno if this affects any other embedders but I guess this is a head's >>>>>>>> up >>>>>>>> in case anyone wants to check. >>>>>>>> >>>>>>>> I currently use Callee as a convenience when passing around >>>>>>>> FunctionCallBackInfo: for adding the function name to a Throw or as >>>>>>>> debugging information it's very convenient. Callee is also very useful >>>>>>>> in >>>>>>>> the common pattern of allowing a constructor to be called without a >>>>>>>> New and >>>>>>>> invoking it as a constructor under the covers: >>>>>>>> args.Callee()->NewInstance(argc, argsForConstructor). >>>>>>>> >>>>>>>> The former use is easy to work around but painful as I now need to >>>>>>>> add an extra parameter to a ton of internal C++ methods. The latter is >>>>>>>> more >>>>>>>> challenging as I now need to add a persistent reference to all my C++ >>>>>>>> constructors. >>>>>>>> >>>>>>>> I guess I'll just suck it up but if this affects anyone else one >>>>>>>> way to help people deal with this would be to keep a weak reference in >>>>>>>> the >>>>>>>> Isolate to last C++ function called that's made available via something >>>>>>>> like isolate->LastCallee(). I'd be happy to submit a project to add >>>>>>>> such a >>>>>>>> call (obviously on purely selfish grounds) but I suspect it would be >>>>>>>> (justifiably) rejected if I'm the world's only user of Callee. >>>>>>>> >>>>>>>> So are there any others out there? >>>>>>>> >>>>>>>> Thanks >>>>>>>> >>>>>>>> -- >>>>>>>> -- >>>>>>>> v8-users mailing list >>>>>>>> >>>>>>> [email protected] >>>>>>> >>>>>>> >>>>>>>> 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 [email protected]. >>>>>>> >>>>>>> >>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>> -- >>>>>> -- >>>>>> v8-users mailing list >>>>>> [email protected] >>>>>> 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 [email protected]. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>>> -- >>>>> v8-users mailing list >>>>> [email protected] >>>>> 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 [email protected]. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> 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 [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> > Enrico Pertoso > > Software Engineer > > [email protected] > > Google Germany GmbH > > Dienerstraße 12 > > 80331 München > > > Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle > > Registergericht und -nummer: Hamburg, HRB 86891 > > Sitz der Gesellschaft: Hamburg > > > Diese E-Mail ist vertraulich. Wenn Sie nicht der richtige Adressat sind, > leiten Sie diese bitte nicht weiter, informieren Sie den Absender und > löschen Sie die E-Mail und alle Anhänge. Vielen Dank. > > > > This e-mail is confidential. If you are not the right addressee please do > not forward it, please inform the sender, and please erase this e-mail > including any attachments. Thanks. > > -- > -- > v8-users mailing list > [email protected] > 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 [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
