Notes on the Phobos style guide
Jonathan M Davis
jmdavisprog at gmail.com
Mon Aug 16 15:49:55 PDT 2010
This is, unfortunately, the sort of thing that can get pretty opinionated, and
there are plenty of people who hate having to write code in any style other than
their own, but unfortunately, you do sometimes need at least some sort of
stylistic guidelines or things can become a mess.
On Monday, August 16, 2010 15:15:47 bearophile wrote:
> Few comments of mine about this, written by Andrei:
> http://lists.puremagic.com/pipermail/phobos/2010-August/001757.html
>
> > * Generally the prevalent Phobos (and I hope D) style is to declare
> > local values as late as possible.
>
> Good.
[snip]
Personally, I really hate having all of the variables declared at the top of the
function and consider it bad style. You'll have fewer bugs if you can avoid
declaring variables before you're actually read to initialize it with a real
value (though D's default initialization of all variables mitigates this
somewhat).
>
> > * In D, use of auto is recommended unless you want to make a
> > specific point by mentioning the type.
>
> This is where I don't agree.
[snip]
I'm increasingly in the pro-auto camp, but I do think that you need to use it
wisely. In most cases, I think that it's quite clear what type you're dealing
with, but if there really is going to be an issue with that, then the exact type
should be used. Overall, I do think that auto should be the default -
particularly for smaller functions where it's really easy to see what's going on
- but there are exceptions.
> > * Phobos currently uses full bracing after if, while etc. I've tried to
> > follow that but on occasion I slip. I'm not sure whether we should
> > enforce such rules; this might be a good time to discuss that.
>
> I don't have a definite opinion on this. I am just glad Python has *solved*
> this class of problems, and it removes some braces-related bugs.
Personally, I _like_ having braces in D, but I also dislike pointless braces. I
usually only put them if the condition spans more than one line or if the body
spans more than one line (whether it's one statement or multiple). I hate having
to put extra braces, but I've had to work in shops before where braces were
always required.
> > * Generally I encourage economy of vertical space, e.g.
> > auto imp = new File.Impl(fp, 1, host ~ ":" ~ to!string(port));
> > f.p = imp;
> > =>
> > f.p = new File.Impl(fp, 1, host ~ ":" ~ to!string(port));
>
> It's a matter of readability too.
> I generally don't like this:
>
> if (...) bar();
>
> I generally prefer (as the Python PEP 8 suggests):
>
> if (...)
> bar();
>
> But in some situations (for example when there are many small short
> successive ifs), the one-line version is OK:
>
> if (cond1) bar();
> if (condi2) baz();
> if (co3) spam();
> if (condtion4) x++;
I hate one line if statements, but I don't like pointless variables either. I
also dislike the extra spacing that you have around your parens. I do find it
interesting, however, that Andrei lists both always using braces and saving
vertical space, since they're pretty contradictory.
In any case, ultimately, Phobos likely does need some sort of simple style guide
that ensures that the code is at least relatively uniform, but it's pretty much
a guarantee that whatever is picked is going to annoy at least some portion of
the folks that have to deal with it. But ultimately, it only really matters to
the Phobos devs, since they're the ones who are going to be working on the code.
Obviously, in my own code, I'm just going to code the way that I like, and I see
no point in any kind of standard D style guide with regards to braces and other
visual elements to relate primarily to how the code looks rather than what it
does.
As for stuff like auto, however, I'd argue that that isn't entirely a stylistic
issue. Part of that is a question of good practices rather than having something
that looks nice and is readable. And I'm not aware of any official anything
anywhere that talks about what is and isn't considered good practice in D. We
should probably get something like that at some point as some of what should go
there becomes clear. Though I'm not sure whether there's enough collective
experience with D2 at this point (especially considering that it's only recently
stop having massive changes to it) to really get much of a list together that's
particularly specific to D rather than what you'd do in similar languages like
C++ or C#.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list