9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Comeau At9Fans <comeauat9fans@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] Plan 9/plan9port coding conventions
Date: Thu, 12 Jan 2012 10:18:38 -0500	[thread overview]
Message-ID: <CAE9W7-jdXEYmOjas6VmG_Z9_xyEeGBbut8k0vfoZcQ8iJedMnQ@mail.gmail.com> (raw)
In-Reply-To: <86vcoif5f4.fsf@cmarib.ramside>

[-- Attachment #1: Type: text/plain, Size: 4954 bytes --]

On Wed, Jan 11, 2012 at 1:41 PM, <smiley@icebubble.org> wrote:

> As readers may remember from a previous thread, I have historically
> been, well, less than enamored with some aspects of the coding style
> used in Plan 9/plan9port.  Now that I'm getting into development, I'd
> like to know what coding conventions the Plan 9 community endorses.  I
> have read the Plan 9 compiler paper, and understand the conventions
> described in it.  While conventions such as composing variable names
> using lower case letters and no underscores do irk me a bit, I can live
> with them---because those are the conventions that the community has
> adopted.  However, there are a number of stylistic features in Plan
> 9/p9p code which I've noticed (which AREN'T discussed in the compiler
> paper) and I'm wondering whether they're intentional conventions or not.
>
> (1) For example, P9 code tends to use variable names like "i" and "j",
> where I would typically use self-documenting variable names like "row"
> and "col".  Variable names like "row" and "col" are much easier to
> search for (i.e., with a right-click), too.  Names like "i" and "j"
> (which occur in many identifiers) will generate many false positives.
>

Most stylistic things have both pros and cons.  So for instance, you are
correct that i and j *are* hard to grep for.  And you are also correct that
one should normally strive for so-called self-documenting names.  However,
with that in mind, row and col specifically have their own limitations (for
instance, they don't have much more meaning than i and j and in some ways
can be considered worse).  So, as in many disciplines, we're left with a
bunch of engineering compromises to wiggle through.  Some of the
compromises will be obvious flaws and mistakes, and then so must be dealt
with accordingly (resistance or learned helplessness :).


> (2) In functions, variables are often declared together in one
> paragraph, and then, later, initialized in another paragraph, as in:
>
>  int i;
>  char *s;
>
>  /* stuff */
>
>  i = 0;
>  s = nil;
>
> rather than something like:
>
>  int i = 0;
>  char *s = nil;
>

Neither of these is necessarily superior to the other, or other forms.


> (3) Lots of global variables are used, without any distinguishing
> syntax, i.e. "char *f".  I prefer to designate global variables with
> something like a leading underscore, i.e. "char *_filename".
>

I usually consider this to be putting a set of bad choices into a pot, and
picking from them at will.  It also tends to yield exactly the competing
styles you're bumping into.

(4) In ARGBEGIN/ARGEND blocks, boolean switches are often set using the
> "++" operator rather than "|= 1", i.e.:
>
>  case 'v':
>    verbose++;
>  case 'x':
>    x++;
>
> as opposed to:
>
>  case 'v':
>    verbose++;
>  case 'x':
>    x |= 1;
>

Again, we have language limitations yielding multiple acceptable'ish
compromises of 6 of one and 1/2 dozen of another.


> (5) P9 code tends to repeat constructs such as "argv[i]" over and over
> throughout the code, like:
>
>  for(i = 0; i < argc; i++){
>    somestuff(argv[i]);
>    otherstuff(argv[i]);
>  }
>
> whereas I would typically use something like:
>
>  int argnum;
>  char *argstr;
>
>  for(argnum = 0; argnum < argc; argnum++){
>    argstr = argv[argnum];
>    somestuff(argstr);
>    otherstuff(argstr);
>  }
>

This one's a mixed bag again.  Used to be you may have had to do something
like this in the name of efficiency (of the executable code).  There can be
times to prefer the latter, but that said, argstr has it's own issues, so
does creating another variable when just saying what something is in the
first place can be its best name, but repeating complicated dimensions,
struct membership selections, etc. can get messy too.  So....


> Are these practices official/unofficial Plan 9 coding conventions?  Are
> they used for performance purposes?  Are they just poor style?  Or has
> this kind of style been used for so long that it's BECOME Plan 9's style
> of choice?  Also, is it considered polite or acceptable coding practice
> to alter the style of code written by other contributors?  I don't want
> to step on anybody's toes by "fixing" style which other Plan 9
> developers consider to be "Plan 9" style coding conventions.
>

Be careful when delving into "poor".  Some loose thoughts:  Beauty is in
the eye of the beholder.  There often is not a best, just engineering
compromises.  This does not mean one will not run across something horrid.
 Continue to question all.  Many things are often at odds.

--
Greg Comeau / 4.3.10.1 with C++0xisms now in beta!
Comeau C/C++ ONLINE ==>     http://www.comeaucomputing.com/tryitout
World Class Compilers:  Breathtaking C++, Amazing C99, Fabulous C90.
Comeau C/C++ with Dinkumware's Libraries... Have you tried it?

[-- Attachment #2: Type: text/html, Size: 6482 bytes --]

  parent reply	other threads:[~2012-01-12 15:18 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-11 18:41 smiley
2012-01-11 18:53 ` Richard Miller
2012-01-12 20:20   ` Yaroslav
2012-01-11 19:01 ` Jeremy Jackins
2012-01-11 20:37 ` Russ Cox
2012-01-11 20:45 ` erik quanstrom
2012-01-11 21:20 ` John Floren
2012-01-11 21:25   ` Russ Cox
2012-01-11 23:00   ` Iruatã Souza
2012-01-11 23:57     ` John Stalker
2012-01-12  1:33       ` Skip Tavakkolian
     [not found]       ` <CAJSxfmJdLV8NMJgMFPcqCP+=ZGe8k2U=PcdkpexwUzbcL442+Q@mail.gmail.c>
2012-01-12  2:53         ` erik quanstrom
2012-01-12 15:18 ` Comeau At9Fans [this message]
2012-01-12 17:56 ` Christian Neukirchen
2012-01-12 23:07   ` Skip Tavakkolian
2012-01-13 14:55 ` Andrés Domínguez
2012-01-16 10:02 ` faif
2012-01-16 11:04   ` John Stalker
2012-01-16 22:50 ` smiley
2012-01-16 22:57   ` andrey mirtchovski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAE9W7-jdXEYmOjas6VmG_Z9_xyEeGBbut8k0vfoZcQ8iJedMnQ@mail.gmail.com \
    --to=comeauat9fans@gmail.com \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).