13.06.2017, 20:08, "Maciej Stachowiak" <[email protected]>:
> 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 <[email protected]> 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 <[email protected]> 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
>>>  [email protected]
>>>  https://lists.webkit.org/mailman/listinfo/webkit-dev
>>
>>  _______________________________________________
>>  webkit-dev mailing list
>>  [email protected]
>>  https://lists.webkit.org/mailman/listinfo/webkit-dev
>
> _______________________________________________
> webkit-dev mailing list
> [email protected]
> https://lists.webkit.org/mailman/listinfo/webkit-dev

-- 
Regards,
Konstantin
_______________________________________________
webkit-dev mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to