<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>On Jun 18, 2013, at 7:03 PM, Emil A Eklund &lt;<a href="mailto:eae@chromium.org">eae@chromium.org</a>&gt; wrote:</div><div><br><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">+1, much clearer and the pointer vs reference makes it even more so.<br>Perhaps enough so that the required prefix could be dropped:<br><br>StyleResolver* optionalStyleResolver();<br>StyleResolver&amp; styleResolver();<br></div></blockquote><div dir="auto"><br></div></div>I love this!<div><br></div><div>On Jun 18, 2013, at 10:16 PM, Ryosuke Niwa &lt;<a href="mailto:rniwa@webkit.org">rniwa@webkit.org</a>&gt; wrote:</div><div><br></div><div><blockquote type="cite">True. But it's important to differentiate a simple inline accessor and a lazily-create function because it's very easy to write code like:<br><br>if (styleResolver().x())<br>&nbsp; &nbsp; styleResolver().y();<br></blockquote><br></div><div>Like Maciej, I disagree on this point.</div><div><br></div><div>If we gave special names to every accessor that was not just a load from a field, our code would get bloated and not-fun to read:</div><div><br></div><div>globalObject-&gt;vmWithMaskAndTwoPointerIndirections();</div><div>stringImpl-&gt;computeAndStoreHashInLinearTime();</div><div>etc.</div><div><br></div><div>Itís the programmerís job to understand the efficiency of the primitives he or she uses, and to profile hot code to make sure itís not needlessly inefficient.</div><div><br></div>On Jun 18, 2013, at 6:38 PM, Darin Adler &lt;<a href="mailto:darin@apple.com">darin@apple.com</a>&gt; wrote:<br><br><blockquote type="cite">It seems like the C++&nbsp;community likes the name optional for this concept; isnít there some kind of std::optional template?<br></blockquote><div><br></div>Yes:&nbsp;<div><br></div><div>&lt;<a href="http://en.cppreference.com/w/cpp/utility/optional">http://en.cppreference.com/w/cpp/utility/optional</a>&gt;</div><div><br></div><div>The class template&nbsp;std::optional&nbsp;manages an&nbsp;optional&nbsp;contained value. The value may be in either initialized or uninitialized state.<br><br><div>Geoff</div></div></body></html>