auto: useful, annoying or bad practice?

Neia Neutuladh dhasenan at ikeran.org
Wed May 2 03:10:20 UTC 2018


On Monday, 30 April 2018 at 21:11:07 UTC, Gerald wrote:
> So I'm curious, what's the consensus on auto?

For local variables, it's not an unalloyed good, but it is good. 
When I use Java, everything is explicit, and sometimes that's 
nice. In D, I think I overuse `auto` for local variables. 
Sometimes I find myself switching it out for an explicit type, 
just because I want the compiler to check that the right-hand 
side is of the type I expect (eg with numeric conversion rules).

For function return types, though? The consensus among Phobos 
devs is it's a "here be dragons" sign. It's a sign that there 
could be breaking changes to your code without warning if you use 
that return type in a nontrivial way. Of course, this isn't made 
clear anywhere, and they don't actually make these changes all 
that often.

But even for that purpose, it's broken. Like your example was 
basically:

RBRange!(RBNode!long*) divide(RedBlackTree!long tree, long pivot, 
bool first)
{
   if (first) return tree.upperBound(pivot);
   return tree.lowerBound(pivot);
}

If the range type were public, your code would work. If 
subsequently the Phobos devs needed to change the range type, 
they could provide an alias, and your code would still work. If 
they needed to change upperBound to return a different type than 
lowerBound, there's nothing they can do about it; your code is 
broken.

But since the return type for both functions is `auto`, they can 
tell you you were wrong to write that code and they were right to 
make it stop working.


More information about the Digitalmars-d mailing list