<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>20.06.2011, в 03:22, Maciej Stachowiak написал(а):</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><blockquote type="cite"><div>For a shared ownership model there are multiple possible definitions of whether a function takes ownership to an object passed as an argument. Here are some of my attempts to describe the bright line:<br><br>   a) Hands off ownership to what could possibly be the sole owner in most code paths.<br>   b) Keeps a reference to the object after the function completes in most code paths.<br>   c) Takes a reference to the object at least once in most code paths.<br><br>   d) Hands off ownership to what could possibly be the sole owner in some code paths.<br>   e) Keeps a reference to the object after it completes in some code paths.<br>   f) Takes a reference to the object at least once in some code paths.<br><br>Is the bright line rule you have in mind (b) or perhaps (e)? Or something not listed here at all?<br></div></blockquote><div><br></div><div>Yes, (b) or (e). I haven't thought about whether "most code paths" or "some code paths" makes more sense, but I'm not sure there are a lot of cases in our code where it makes a difference.</div><div><br></div><div>I don't think it makes sense to talk about a sole owner of a refcounted object. If there is a sole owner at any given time, it is at best temporary. PassRefPtr is about clearly and efficiently transferring a reference, it doesn't need it to necessarily be the sole then-existing reference.</div></span></blockquote><br></div><div>I think that to make this complete, the rules need to be transitive. A function that passes its argument to another function taking a PassRefPtr should itself take a PassRefPtr. That's the case in <<a href="https://bugs.webkit.org/show_bug.cgi?id=52981">https://bugs.webkit.org/show_bug.cgi?id=52981</a>>, for instance.</div><div><br></div><div>It doesn't seem that analyzing code for "most/some code paths takes ownership" would be any easier that analyzing it for "any caller gives away ownership". Yet it's the latter where PassRefPtr is beneficial. Why base the rule on something that's disconnected from actual benefit?</div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div>- WBR, Alexey Proskuryakov</div></span></div><br></body></html>