[webkit-dev] When to use "auto"? (I usually consider it harmful)
fpizlo at apple.com
Thu Jan 2 13:19:49 PST 2014
On Jan 2, 2014, at 1:12 PM, Geoffrey Garen <ggaren at apple.com> wrote:
> Hi folks.
> Recently, I’ve seen patches go by using the C++11 “auto” keyword. For example, let me pick on Andreas:
>> + auto newRenderer = textNode.createTextRenderer(style);
>> + ASSERT(newRenderer);
>> + parentRenderer->addChild(newRenderer.leakPtr(), nextRenderer);
> I think this use of “auto” is net harmful.
> - Less typing
> - I don’t know the type of ’newRenderer’ at a glance
> - Navigating to newRenderer’s class definition is a two-step process: (1) Go to the definition of createTextRenderer and see what it returns; (2) Go to the definition of (1).
> I think the downsides outweigh the upsides here because reading code is more common than writing code, and because it’s not *that* much typing to write out "RenderPtr< RenderText>”. In this particular code, I think it’s especially bad to disguise the type of a pointer in the render tree, since we’re in the middle of a transition to a new type of pointer, and so it’s important to know if you’re looking at code that does the new thing or the old thing.
Code is read more than it is written. In many cases, the types of variables - even nasty templated ones - convey useful information that makes the code easier to read. I think that "auto" is only a good idea if the presence of the full type would be either completely redundant or would make the code hard to read by virtue of being unusually long (>80 chars, like some intense HashMap instantiations). Crucially, while the C++ compiler has a smart type inference engine that can see a lot of code all at once, a typical human reader lacks such powers and so "auto" results in a net loss of information.
> I think an appropriate style guideline for “auto” would say something like:
> - Use “auto" to declare a disgusting templated iterator type in a loop
> - Use “auto… ->" to define a template-dependent return type in a class template
> - In all other cases, use an explicit type declaration
I like this. I would like to see this be added to the style guide.
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the webkit-dev