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