<div dir="ltr">On Thu, Jan 2, 2014 at 11:12 PM, Geoffrey Garen <span dir="ltr">&lt;<a href="mailto:ggaren@apple.com" target="_blank">ggaren@apple.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi folks.<br>
<br>
Recently, I’ve seen patches go by using the C++11 “auto” keyword. For example, let me pick on Andreas:<br>
<br>
&gt; &lt;<a href="http://trac.webkit.org/changeset/161143" target="_blank">http://trac.webkit.org/changeset/161143</a>&gt;<br>
&gt;<br>
&gt; +    auto newRenderer = textNode.createTextRenderer(style);<br>
&gt; +    ASSERT(newRenderer);<br>
&gt;<br>
&gt; ….<br>
&gt;<br>
&gt; +    parentRenderer-&gt;addChild(newRenderer.leakPtr(), nextRenderer);<br>
<br>
I think this use of “auto” is net harmful.<br></blockquote><div> </div><div><div>I agree that in a case where a smart pointer of unclear type (when the new renderer smart pointers are deployed everywhere the situation might be different) is returned it might be better not to use &quot;auto&quot;. </div>
<div><br></div><div>However I also feel the &quot;harm&quot; here is debatable enough that people working on/reviewing the code should make decisions instead of there being a project level dictate. It is a new thing, the appropriate usage hasn&#39;t yet settled and people should be allowed to experiment.</div>
</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I think an appropriate style guideline for “auto” would say something like:<br>

<br>
- Use “auto&quot; to declare a disgusting templated iterator type in a loop<br>
- Use “auto… -&gt;&quot; to define a template-dependent return type in a class template<br>
- In all other cases, use an explicit type declaration<br></blockquote><div><br></div><div>I think this is a too limiting set of rules. I have found that in many cases &quot;auto&quot; improves code readability by having less gunk obscuring the logic. It has also made refactoring easier.</div>
<div><br></div><div>I&#39;m not sure how much rules we really need beyond &quot;use &#39;auto&#39; when it improves code&quot;. I gather from this thread that especially people working on JSC are not comfortable using it so they shouldn&#39;t.</div>
<div><br></div><div>If we start making rules I&#39;d add the following:<br></div><div><br></div><div>- Use &quot;auto&quot; when the type name is already mentioned on a line:</div><div><br></div><div>auto&amp; cell = toRenderTableCell(*renderer); // right</div>
<div>RenderTableCell&amp; cell = toRenderTableCell(*renderer);  // wrong</div><div><br></div><div>for (auto&amp; source : descendantsOfType&lt;HTMLSourceElement&gt;(*this)) // right</div><div>for (const HTMLSourceElement&amp; source : descendantsOfType&lt;HTMLSourceElement&gt;(*this)) // wrong<br>
</div><div><br></div><div>auto properties = std::make_unique&lt;PropertiesVector&gt;();  //right</div><div>std::unique_ptr&lt;PropertiesVector&gt; properties = std::make_unique&lt;PropertiesVector&gt;(); //wrong</div><div>
 </div><div>This rule is already widely deployed and I think the code readability has improved.</div><div><br></div><div>- Use &quot;auto&quot; when the type is irrelevant. This covers things like iterators and adapter classes:</div>
<div><br></div><div>auto sourceDescendants = descendantsOfType&lt;HTMLSourceElement &gt;(*this));</div><div><br></div><div>It might also cover smart pointer usage like your example and multiline expansions of setSize(foo-&gt;size()).</div>
<div><br></div><div>- Use &quot;auto&quot; when type is obvious for people with basic familiarity with a subsystem:</div><div><br></div><div>auto&amp; style = renderer.style();</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Thoughts?</blockquote><div><br></div><div><br></div><div>   antti</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
Thanks,<br>
Geoff<br>
_______________________________________________<br>
webkit-dev mailing list<br>
<a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
<a href="https://lists.webkit.org/mailman/listinfo/webkit-dev" target="_blank">https://lists.webkit.org/mailman/listinfo/webkit-dev</a><br>
</blockquote></div><br></div></div>