<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 1, 2017, at 10:09 AM, Chris Dumez <<a href="mailto:cdumez@apple.com" class="">cdumez@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I think std::optional<Ref<Type>> looks ugly. Also, unlike RefPtr<>, I do not think it is copyable. It is pretty neat to be able to capture a RefPtr<> by value in a lambda.<div class="">Also, how do you convert it to a raw pointer? myOptionalRef.value_or(nullptr) would not work. Not sure there would be a nice way to do so.</div><div class=""><br class=""></div><div class="">Finally, the storage space argument from Maciej is a good one.</div></div></div></blockquote><div><br class=""></div><div>We could create a specialization for std::optional<Ref>.  Filed: <a href="https://bugs.webkit.org/show_bug.cgi?id=176228" class="">https://bugs.webkit.org/show_bug.cgi?id=176228</a></div><div><br class=""></div><div>That seems like a good idea separately from whether it should be used instead of RefPtr.  Even if we did have style prohibiting it, we might end up with such a type because of template specialization.</div><div><br class=""></div><div>I can see cases were std::optional<Ref> works more naturally into the surrounding code than RefPtr.  That probably happens if your code is already based on Ref.  In my experience there’s a lot of inertia to these things - once some code uses RefPtr enough, it can be awkward to introduce Ref and perhaps vice versa.  I don’t find it very hard to switch between thinking in terms of Ref and RefPtr, so I don’t mind that our code uses both.  I wouldn’t agree with a style that encourages using std::optional<Ref> instead of RefPtr, but I also wouldn’t want to disallow it.</div><div><br class=""></div><div>-Filip</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><div class=""><div class=""> <br class=""><div class="">
<div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">--</div><div class=""><span style="font-size: 13px;" class=""> </span>Chris Dumez</div></div></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<div class=""><br class=""><blockquote type="cite" class=""><div class="">On Sep 1, 2017, at 9:46 AM, Maciej Stachowiak <<a href="mailto:mjs@apple.com" class="">mjs@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><br class=""><br class=""><blockquote type="cite" class="">On Sep 1, 2017, at 9:30 AM, Brady Eidson <<a href="mailto:beidson@apple.com" class="">beidson@apple.com</a>> wrote:<br class=""><br class="">I recently worked on a patch where - because of the organic refactoring of the patch over its development - I ended up with a std::optional<Ref> instead of a RefPtr.<br class=""><br class="">A followup review after it had already landed pointed this out, and it got me to thinking:<br class=""><br class="">Does RefPtr do anything for us today that std::optional<Ref> doesn’t?<br class=""></blockquote><br class="">The obvious things would be: uses less storage space, has a shorter name.<br class=""><br class=""><blockquote type="cite" class=""><br class="">I kind of like the idea of replacing RefPtr with std::optional<Ref>. It makes it explicitly clear what object is actually holding the reference, and completely removes some of the confusion of “when should I use Ref vs RefPtr?"<br class=""><br class="">Thoughts?<br class=""><br class="">Thanks,<br class="">~Brady<br class="">_______________________________________________<br class="">webkit-dev mailing list<br class=""><a href="mailto:webkit-dev@lists.webkit.org" class="">webkit-dev@lists.webkit.org</a><br class=""><a href="https://lists.webkit.org/mailman/listinfo/webkit-dev" class="">https://lists.webkit.org/mailman/listinfo/webkit-dev</a><br class=""></blockquote><br class="">_______________________________________________<br class="">webkit-dev mailing list<br class=""><a href="mailto:webkit-dev@lists.webkit.org" class="">webkit-dev@lists.webkit.org</a><br class=""><a href="https://lists.webkit.org/mailman/listinfo/webkit-dev" class="">https://lists.webkit.org/mailman/listinfo/webkit-dev</a><br class=""></div></div></blockquote></div><br class=""></div></div></div></div>_______________________________________________<br class="">webkit-dev mailing list<br class=""><a href="mailto:webkit-dev@lists.webkit.org" class="">webkit-dev@lists.webkit.org</a><br class="">https://lists.webkit.org/mailman/listinfo/webkit-dev<br class=""></div></blockquote></div><br class=""></body></html>