Optimization, volatile (was Re: volatile)

Every system needs one terry at wsccs.UUCP
Thu Apr 28 14:43:48 AEST 1988


In article <2003 at rtech.UUCP>, jas at llama.rtech.UUCP (Jim Shankland) writes:
> In article <13074 at brl-adm.ARPA> dsill at NSWC-OAS.arpa (Dave Sill) writes:
> >I (Terry) write:
> >>Basically, if it works without -O, it should work with -O, regardless of what
> >>the compiler writer's optimization does to achieve its goal.  If this makes
> >>writing compilers harder, so what?
> >
> >This bears repeating.  There should be no circumstances under which
> >the semantics of the language are changed by a flag to the compiler.
> 
> However, you didn't repeat it.  Your assertion is reasonable, Lambert's
> is not.  The world is full of (strictly speaking) incorrect C programs
> that work just fine because of some accident of hardware, the compiler
> used, etc.

Well, before you rip my head off for a fragment (strictly speaking out of
context), consider it a basic assumption that you are compiling good code.
Further assume that the standard is K&R, not ANSI.  Keeping badly written
programs running on a single architecture was not the object of my statement;
I have clarified this in another posting this very evening.  I don't expect
non K&R-conforming programs to work.

> A good optimizer can "break" programs (actually, cause existing bugs to
> become manifest)

It shouldn't be necessary to change all the code in the world to be ANSI
conformant (instead of K&R conformant) to keep some stupid optimizer from
breaking it.

> just as porting a C program from a VAX to a Sun can.

This is the method one should use to determine if code is "bad"... but I
suggest you do not use a SUN 400* (matches all SUN 400 series) as your Sun,
as some of the assumptions it makes are _NOT_ K&R.

> Perhaps that sounds like nitpicking; I don't think it is.  To get back
> to "volatile":  it provides a portable way to declare storage objects
> that may change without notice, and thus is useful in writing portable
> (not necessarily portable *everywhere*, but plenty portable for may uses)
> programs that access device registers, use shared memory, signal handlers,
> etc. (we've been over the whole list).

yes, it's a nice toy on rare ocassion, but that's why #pragma was invented.

> 	I am amused to think what my employer's customers might say if
> 	we told them that we could have easily made our software 20-30%
> 	faster, but couldn't be bothered for such an inconsequential gain.

	A: Don't tell them and keep your job.

> 	(3) "Let implementers of optimizing compilers come up with their
> 	own pragmas that can turn off certain optimizations where they
> 	will be destructive."  In other words, let each implementer
> 	add "volatile" in her own way.  However, the semantics of
> 	"volatile" are well-defined and broadly useful.  Making its
> 	use non-portable is gratuitous.

This is silly.  If ANSI thinks they can redefine C, why should #pragma be
an effort in imagination?  Couldn't they say 'hey... use this'?

>	As an aside, the arguments over "volatile int mutex; ... ++mutex;"
>	are a red herring.  "volatile" clearly does not guarantee atomicity,
>	nor is it intended to.

No, but it might be an incentive to have it as a language feature instead of a
#dogma... Nope, doesn't swing me.


| Terry Lambert           UUCP: ...{ decvax, ihnp4 } ...utah-cs!century!terry |
| @ Century Software        OR: ...utah-cs!uplherc!sp7040!obie!wsccs!terry    |
| SLC, Utah                                                                   |
|                   These opinions are not my companies, but if you find them |
|                   useful, send a $20.00 donation to Brisbane Australia...   |
| 'Admit it! you're harrasing me because of the quote in my signature!'       |



More information about the Comp.lang.c mailing list