9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: "Russ Cox" <rsc@plan9.bell-labs.com>
To: 9fans@cse.psu.edu
Subject: Re: [9fans] no const?
Date: Wed, 13 Sep 2000 14:06:07 -0400	[thread overview]
Message-ID: <20000913180633.35E20199E0@mail> (raw)

I don't know anything officially but what I understand is...

In the Plan 9 compilers, volatile is mostly unnecessary.
Treating all variables as callee-save has the side effect
of taking care of setjmp and longjmp.  I believe pointers
are always dereferenced (i.e. multiple *p's will never get
coalesced into a single dereference or lifted out of a loop).
Those are the two main needs for volatile, gone, at the
price of a little optimization, as was pointed out.

When I tried to port drawterm (basically a stripped down
Plan 9 kernel) to Digital Unix, I had a bear of a time putting
the volatiles in the right places, until I found the -volatile
compiler flag to make everything volatile.  This is basically
what the Plan 9 compiler does.

In the case of const, it is harder to justify both its 
necessity and its omission.  It's hard to explain to people,
and as Forsyth points out, adds little serious protection.
It's also not too hard to implement, and indeed the compilers
do implement it now.  The lack of necessity is really the 
best justification for the omission.  The C type system is
not particularly expressive, but adding little warts like
const or restrict, whatever that means, just sullies it without
any real benefit.  Boyd is right that it certainly feels like
such things have been added as a sacrifice to the god of 
efficiency rather than for use by mere mortals.

And it is a fact that const and volatile are not easily
understood.  Try explaining to a beginning C programmer
why "volatile Chan *c" or "Chan volatile *c" both declare
a pointer to a volatile Chan structure rather than a 
volatile pointer to a Chan structure (which would, obviously,
be "Chan *volatile c").

Russ



             reply	other threads:[~2000-09-13 18:06 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-09-13 18:06 Russ Cox [this message]
2000-09-14  8:13 ` Douglas A. Gwyn
  -- strict thread matches above, loose matches on Subject: below --
2000-09-13 14:39 forsyth
2000-09-13 16:44 ` Douglas A. Gwyn
2000-09-13 14:29 miller
2000-09-13 14:22 Russ Cox
2000-09-13 14:30 ` Boyd Roberts
2000-09-13 14:00 David L Rubin
2000-09-13 14:17 ` Boyd Roberts
2000-09-13 16:42   ` Douglas A. Gwyn
2000-09-13 17:03     ` Boyd Roberts
2000-09-13 17:11       ` Steve Kilbane
2000-09-13 19:33         ` Boyd Roberts
2000-09-14  8:13           ` Douglas A. Gwyn
2000-09-14 12:34             ` Boyd Roberts
2000-09-15  8:47               ` Douglas A. Gwyn
2000-09-15 11:34                 ` Boyd Roberts
2000-09-15 13:07                   ` Theo Honohan
2000-09-15 14:55                     ` Boyd Roberts
2000-09-16  8:51                       ` Matt Lawless
2000-09-18 10:47                   ` Douglas A. Gwyn
2000-09-15 20:46                 ` Steve Kilbane
2000-09-14 19:41           ` Steve Kilbane
2000-09-18 10:47             ` Douglas A. Gwyn

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=20000913180633.35E20199E0@mail \
    --to=rsc@plan9.bell-labs.com \
    --cc=9fans@cse.psu.edu \
    /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).