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.

Reply via email to