Would SharedTask’s sharing be semantically incorrect for users of WTF::Function? In other words, do you rely on the compiler error that says that there is no copy constructor?
I’m imagining that if WTF::Function was backed by SharedTask that it would not result in any behavior change for existing WTF::Function users. At worst, it would mean that WTF::Function’s backing store has an extra word for the ref count - but if you only move and never copy then this word starts out at 1 and stays there until death, so it’s very cheap. -Filip > On Jun 13, 2017, at 9:43 AM, Chris Dumez <cdu...@apple.com> wrote: > > In most cases in WebCore at least, we don’t actually want to share ownership > of the lambda so we don’t need RefCounting / SharedTask. Because of this, I > don’t think we should merge SharedTask into Function. I think that as it > stands, WTF::Function is a suitable replacement for most uses in WebCore > since we actually very rarely need copying (either it just builds or the code > can be refactored very slightly to avoid the copying). > > -- > Chris Dumez > > > > >> On Jun 13, 2017, at 9:34 AM, Filip Pizlo <fpi...@apple.com >> <mailto: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 >>> <mailto: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 <mailto:webkit-dev@lists.webkit.org> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >> >> _______________________________________________ >> webkit-dev mailing list >> webkit-dev@lists.webkit.org <mailto: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