I like these renamings. I’m also ok with renaming Function to UniqueFunction 
but I’m also ok with keeping the current name. 

-Filip

> On Jun 13, 2017, at 10:12 AM, Konstantin Tokarev <annu...@yandex.ru> wrote:
> 
> 
> 
> 13.06.2017, 20:08, "Maciej Stachowiak" <m...@apple.com>:
>> In case it turns out not to be possible to reduce the number of concepts 
>> (besides eliminating std::function), maybe it would help to change the names 
>> and behaviors of these classes to match better. Function, SharedFunction and 
>> ScopedFunction would have a much more obvious relationship to each other 
>> than Function, SharedTask and ScopedLambda.
> 
> Maybe rename Function to UniqueFunction?
> 
>> 
>> (I'm not sure if the direct assignment from a lambda is an incidental 
>> difference or one that's required by the different ownership semantics.)
>> 
>>  - Maciej
>> 
>>>  On Jun 13, 2017, at 9:34 AM, Filip Pizlo <fpi...@apple.com> wrote:
>>> 
>>>  We should have a better story here. Right now the story is too 
>>> complicated. We have:
>>> 
>>>  - ScopedLambda or ScopedLambdaRef if you have a stack-allocated function 
>>> that outlives its user
>>>  - SharedTask if you have a heap-allocated function that you want to share 
>>> and ref-count
>>>  - WTF::Function if you have a heap-allocated function that you want to 
>>> transfer ownership (move yes, copy no)
>>>  - std::function if you have a heap-alloated function that you want to pass 
>>> by copy
>>> 
>>>  Only std::function and WTF::Function do the magic that lets you say:
>>> 
>>>  std::function f = <lambda>
>>> 
>>>  Also, std::function has the benefit that it does copying. None of the 
>>> others do that.
>>> 
>>>  ScopedLambda serves a specific purpose: it avoids allocation. Probably we 
>>> want to keep that one even if we merge the others.
>>> 
>>>  IMO SharedTask has the nicest semantics. I don’t ever want the activation 
>>> of the function to be copied. In my experience I always want sharing if 
>>> more than one reference to the function exists. I think that what we really 
>>> want in most places is a WTF::Function that has sharing semantics like 
>>> SharedTask. That would let us get rid of std::function and SharedTask.
>>> 
>>>  In the current status quo, it’s not always correct to convert 
>>> std::function to the others because:
>>> 
>>>  - Unlike ScopedLambda and SharedTask, std::function has the magic 
>>> constructor that allows you to just assign a lambda to it.
>>>  - Unlike ScopedLambda, std::function is safe if the use is not scoped.
>>>  - Unlike WTF::Function, std::function can be copied.
>>> 
>>>  -Filip
>>> 
>>>>  On Jun 13, 2017, at 9:24 AM, Darin Adler <da...@apple.com> wrote:
>>>> 
>>>>  I’ve noticed many patches switching us from std::function to 
>>>> WTF::Function recently, to fix problems with copying and thread safety.
>>>> 
>>>>  Does std::function have any advantages over WTF::Function? Should we ever 
>>>> prefer std::function, or should we use WTF::Function everywhere in WebKit 
>>>> where we would otherwise use std::function?
>>>> 
>>>>  — Darin
>>>>  _______________________________________________
>>>>  webkit-dev mailing list
>>>>  webkit-dev@lists.webkit.org
>>>>  https://lists.webkit.org/mailman/listinfo/webkit-dev
>>> 
>>>  _______________________________________________
>>>  webkit-dev mailing list
>>>  webkit-dev@lists.webkit.org
>>>  https://lists.webkit.org/mailman/listinfo/webkit-dev
>> 
>> _______________________________________________
>> webkit-dev mailing list
>> webkit-dev@lists.webkit.org
>> https://lists.webkit.org/mailman/listinfo/webkit-dev
> 
> -- 
> Regards,
> Konstantin
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to