comp.lang.ada
 help / color / mirror / Atom feed
From: clodius@hotspec.lanl.gov (William Clodius)
Subject: Re: C is 'better' than Ada because...
Date: 1996/07/30
Date: 1996-07-30T00:00:00+00:00	[thread overview]
Message-ID: <g168758ry5.fsf@hotspec.lanl.gov> (raw)
In-Reply-To: 31e02c32.342948604@netline-fddi.jpl.nasa.gov


In article <01bb7e2f$aeef4660$87ee6fce@timpent.airshields.com> "Tim
Behrendsen" <tim@airshields.com> writes: 

<snip>

   I'm not going to claim to have used every compiler, obviously, but
   I base this opinion on often viewing the assembly language output when
   I get a core dump or during debugging sessions.  Now, I've used a lot
   of assembly language, so I usually write my C code to be easy on the
   optimizer (use pointers when needed rather indexes, for example), and
   I admit that sometimes optimizers are very good.  The problem is, the
   compiler often doesn't have enough contextual information to know what
   to do compared to the human writing the program, which bring us to ...

There is no reason why a good compiler should generate worse code for
an array access than for a pointer access. An array can be constructed
by the compiler as a single block of memory whose access via indices
is the same as through a pointer. Au contraire, because a pointer can
be associated with any object of compatible type the analysis for a
highly optimizing compiler is more difficult with pointers than with
arrays. The problem with arrays in C is their lack of flexibility in
term of dynamic memory allocation, that if they are associated with a
pointer at any point in the scope alias analysis becomes more
compicated for the compiler, and that when pased as an argument
to a user defined function they are not distinguished from pointers.

   Global optimization: The compiler can often make decisions better
   than the human can because of the large scope of global optimizations,
   but again, the information needed to know when certain areas are
   going to be used a lot versus other areas is not known at compile
   time, which moves us to ...

Most compilers, the ones O'Keefe cites are exceptions, do relatively
little global analysis. O'Keefe's were developed for languages that
would otherwise be extremely difficult to optimize. Many languages
need much less global information for the most useful optimizations,
due to the presence of typing, data type structure, side effect, and
aliasing information that is required in standard conforming
code. Standard conforming C code provide the essential typing and data
structure information, but does not provide full side effect and
aliasing information, so that it is intermediate in optimizability.

   Run time profiling/compiler feedback: This can certainly provide
   good information back to the compiler, but it seems a little
   dangerous.  I have not used this type of optimization, so my
   opinion means little in this case, except for just my general
   impression.  Anything other than a trivial program is going
   to be very difficult to simulate real-world conditions in order
   to get an optimal result.  The downside is if your test conditions
   are wrong, you may end up with a "most pessimum" optimization.

But if your test conditions are wrong you have typically not
appropriately tested all aspects of the code, including the
correctness of its output, its robustness, and its general
efficiency.

   It just seems to me that there is no substitute for a well
   thought-out design.  Depending on the compiler to save bad design
   is just a bad idea.

True, a compiler will not change a 0(n*n) algorithm to a 0(n*ln(n))
algorithm, but it can have a significant effect on the multiplicative
factor. Further, probably every language has limitations in terms of
expressibility of design. Algorithms that are essentially independent
of data type, e.g., lists, are difficult to specify in a type
independent form in languages such as C, and must be reimplemented for
each new special case. Aspects of the design that are independent of
the details of the implementation, but can be used by the compiler for
optimization, e.g., that a list wil not be cyclic or that an object
will not be modified after its creation, are also difficult to express
in C, and many other commonly used languages.

<snip>

   The above are all worthwhile opimizations; I'm not claiming that
   optimizers do nothing.  All I'm saying is that too often programmers
   fall back on the lazy line, "Oh well, the compiler should take care
   of that."  For example, if I have ...

   for (i = 0; i < 10000000; ++i) 
       array[i] *= abs(values[i]);

   Should I be *sure* this is going to be done efficiently, and use
   pointers, or should I just let the compiler handle it? I say that
   a competent programmer should use pointers out of habit, because
   its just good design and practice.  And when the problem becomes
   less trivial than the one above, the programmer will already be
   using the proper techniques *the first time*, rather than having
   to go back and fix the inevitable performance bottlenecks.

Again a good compiler, if anything, should generate better code for an
array than for a pointer.

   I think you are being too optimistic that optimizers produce
   better code than "almost every programmer there is".  If that were
   true, then projects would *never* be written in assembly language.

   As it stands, we know that often times things are written in
   assembly for performance reasons, such as device drivers.
   The perfect example of this are computer games.  If your theory
   were true, then they would all be written in high-level languages
   to gain the best performance.  We know that this isn't the case,
   however.  A bright human can always outdo the optimizer.

Again history affects useage. First, the most efficient code
generators are produced first in a research environment, and only
propagate to commercial compilers after their robustness has been
thoroughly tested. Second, we rarely judge anything without the
predjudices of our years of experience. People typically expect what
was standard when they first started in a field, not what is currently
standard. Optimizers are typically better now than they were ten years
ago. Third, users do not always put a large emphasis on general code
efficiency. For example, the original Fortran I and II compilers used
a number of optimizations that were not used in any other compilers,
Fortran or otherwise, untill the late sixties, and were only common in
compilers by the mid to late seventies. Fourth, while high level
languages are not commonly used for such tasks they are becoming more
commonly used for such tasks, Erlang in particular comes to mind.

   > And you know what?  C is one of the *harder* languages to optimise!

   You are probably right, if you let the optimizer handle everything.
   But C also gives the capability to do things such as ...

   if ((array[++n] = GetValue(arg)) != 0) {
       ....

   v.s. a typical non-C language ...

   n = n + 1;
   array[n] = GetValue(arg);
   if (array[n] != 0) {
       ...
   }

   Now, which is easier to optimize?  For this trivial case, a
   modern compiler would probably do exactly the same thing, but
   what about when it starts getting non-trivial?  If I code my
   expressions to take advantage of the "data flow" nature of C's
   syntax, I can make it very easy for the optimizer to do a
   great job.  And it's not any more work, it's just a matter of
   experience and living in reality, and not pretending that the
   compiler is smarter than it really is.

Actually C has relatively little in the way of data flow concepts as
data flow is commonly understood. A true data flow language would
avoid side effects in almost every context except I/O. Your example is
full of side effects, some of which, particularly GetValue(arg), are
difficult to optimize. Depending on the context a data flow language
might have the syntax

array[1:n] = GetValye(arg(1:n));
where (array /= 0) { ... }

in the above GetValue is required to not have side effects so that the
definition 

array[1:n] = GetValye(arg(1:n));

can be understood as occuring in parallel. In C for full optimization
the compiler has to determine that arg is not aliased with elements of
array, and that GetValue has no side effects. Note that a highly
pipelined architecture is comparable to a truly parallel architecture
in many optimization issues.
-- 

William B. Clodius		Phone: (505)-665-9370
Los Alamos National Laboratory	Email: wclodius@lanl.gov
Los Alamos, NM 87545





  parent reply	other threads:[~1996-07-30  0:00 UTC|newest]

Thread overview: 272+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-06-19  0:00 C is 'better' than Ada because Alan Brain
1996-06-20  0:00 ` Ron Thompson
1996-06-22  0:00 ` Nasser Abbasi
1996-06-22  0:00   ` David Morton
1996-06-22  0:00     ` Robert Dewar
1996-06-23  0:00       ` The Deviant
1996-06-23  0:00         ` Robert Dewar
1996-06-23  0:00         ` Michael Feldman
1996-06-23  0:00         ` John Winters
1996-06-24  0:00         ` token%/etc/HOSTNAME
1996-06-23  0:00     ` John Winters
1996-06-23  0:00       ` David Morton
1996-06-23  0:00         ` Lawrence Kirby
1996-06-27  0:00           ` ) OH NO "...begs the question..." Ralph Silverman
1996-06-28  0:00             ` Bill Wendling
1996-06-23  0:00         ` C is 'better' than Ada because John Winters
1996-06-23  0:00           ` David Morton
1996-06-30  0:00   ` Nasser Abbasi
1996-06-23  0:00 ` Nasser Abbasi
1996-06-23  0:00   ` Fergus Henderson
1996-06-23  0:00     ` Robert Dewar
1996-06-28  0:00       ` Fergus Henderson
     [not found] ` <874508446wnr@t-cubed.demon.co.uk>
1996-06-29  0:00   ` Jon S Anthony
1996-06-29  0:00 ` Kevin D. Quitt
1996-06-29  0:00   ` Robert Dewar
1996-06-30  0:00   ` Fergus Henderson
1996-07-01  0:00     ` Mike Roske
1996-07-01  0:00       ` Robert Dewar
1996-07-02  0:00       ` Ken Garlington
1996-07-03  0:00     ` Kevin D. Quitt
1996-07-04  0:00       ` Ian Ward
1996-07-05  0:00         ` Peter Amey
1996-07-05  0:00           ` Robert Dewar
1996-07-10  0:00             ` James A. Squire
1996-07-15  0:00               ` Oliver Kellogg
1996-07-16  0:00                 ` Oliver Kellogg
1996-07-18  0:00                   ` Fraser Wilson
1996-07-18  0:00                     ` Fergus Henderson
1996-07-19  0:00                   ` Keith Thompson
1996-07-17  0:00                 ` Robert Dewar
1996-07-11  0:00             ` James A. Squire
1996-07-16  0:00             ` Nasser Abbasi
1996-07-16  0:00               ` Mark A Biggar
1996-07-17  0:00             ` James A. Squire
1996-07-17  0:00             ` Laurent Guerby
1996-07-17  0:00               ` David Emery
1996-07-18  0:00             ` James A. Squire
1996-07-07  0:00           ` Kevin D. Quitt
1996-07-08  0:00             ` Robert Dewar
1996-07-10  0:00               ` Peter Hermann
1996-07-15  0:00                 ` Tim McGuire
1996-07-16  0:00                   ` Kevin D. Quitt
1996-07-16  0:00                     ` Robert Dewar
1996-07-18  0:00                     ` Bob Gilbert
1996-07-19  0:00                       ` Kevin D. Quitt
1996-07-18  0:00                     ` Ken Garlington
1996-07-19  0:00                       ` Kevin D. Quitt
1996-07-19  0:00                         ` Richard O'Rourke
1996-07-22  0:00                           ` Kevin D. Quitt
1996-07-22  0:00                             ` Robert Dewar
1996-07-23  0:00                               ` Theodore E. Dennison
1996-07-23  0:00                               ` Kevin D. Quitt
1996-07-24  0:00                                 ` Theodore E. Dennison
1996-07-24  0:00                                   ` Kevin D. Quitt
1996-07-25  0:00                                     ` Steve Howard
1996-07-25  0:00                                     ` Alan Brain
1996-07-27  0:00                                     ` Bob Kitzberger
1996-07-26  0:00                                   ` Mike Roske
1996-07-25  0:00                                 ` Fergus Henderson
1996-07-25  0:00                                   ` Kevin D. Quitt
1996-07-26  0:00                                     ` Fergus Henderson
1996-07-26  0:00                                     ` kennedy1
1996-07-23  0:00                               ` Tim Behrendsen
1996-07-24  0:00                                 ` Dirk Dickmanns
1996-07-24  0:00                                 ` JamesS1889
1996-07-24  0:00                                 ` Theodore E. Dennison
1996-07-27  0:00                                   ` Tim Behrendsen
1996-07-29  0:00                                     ` Bob Kitzberger
1996-07-30  0:00                                       ` Tim Behrendsen
1996-07-30  0:00                                         ` Theodore E. Dennison
1996-07-30  0:00                                         ` Richard A. O'Keefe
1996-07-30  0:00                                           ` Tim Behrendsen
1996-07-29  0:00                                     ` Ada is 'better' than C because John Herro
1996-07-30  0:00                                       ` Brian Rogoff
1996-07-30  0:00                                         ` Adam Beneschan
1996-07-31  0:00                                         ` Franz Kruse
1996-08-04  0:00                                       ` Richard Riehle
1996-08-05  0:00                                         ` Sandy McPherson
1996-08-06  0:00                                           ` Ken Garlington
1996-08-06  0:00                                             ` GAFFNEY.BRIAN
1996-08-07  0:00                                               ` Ken Garlington
1996-08-08  0:00                                             ` Theodore E. Dennison
1996-08-08  0:00                                               ` Frank Lipski
1996-08-09  0:00                                             ` Sandy McPherson
1996-08-15  0:00                                             ` Mike Stark
1996-08-07  0:00                                           ` Bob Kitzberger
1996-08-08  0:00                                           ` Robert Dewar
1996-08-08  0:00                                             ` Kevin D. Quitt
1996-07-29  0:00                                     ` C is 'better' than Ada because Dirk Dickmanns
1996-07-30  0:00                                       ` Tim Behrendsen
1996-07-31  0:00                                         ` Dirk Dickmanns
1996-07-31  0:00                                           ` Kevin D. Quitt
1996-08-01  0:00                                             ` Alan Brain
1996-08-02  0:00                                               ` Kevin D. Quitt
1996-08-05  0:00                                                 ` Byron B. Kauffman
1996-08-15  0:00                                               ` Mike Roske
1996-08-15  0:00                                                 ` David Shochat
1996-08-16  0:00                                                   ` Ken Garlington
1996-08-16  0:00                                                 ` Jon S Anthony
1996-08-16  0:00                                                 ` John Herro
1996-08-16  0:00                                                   ` John Herro
1996-08-05  0:00                                             ` Robb Nebbe
1996-08-02  0:00                                           ` Dirk Dickmanns
1996-07-31  0:00                                         ` whiting_ms@corning.com (Matt Whiting)
1996-07-30  0:00                                     ` Theodore E. Dennison
1996-08-08  0:00                                     ` Ada is 'better' than C because William Clodius
1996-08-09  0:00                                       ` Robert Dewar
1996-08-09  0:00                                       ` Kevin D. Quitt
1996-08-12  0:00                                       ` OBryan Anthony H
1996-08-12  0:00                                         ` Lawrence Kirby
1996-08-12  0:00                                         ` Bob Kurtz
1996-08-13  0:00                                         ` Tom Watson
1996-08-14  0:00                                         ` Robert Dewar
1996-07-29  0:00                                   ` C is 'better' than Ada because system
1996-07-30  0:00                                     ` Tim Behrendsen
1996-07-25  0:00                                 ` Alan Brain
1996-07-10  0:00               ` John F. Bode
1996-07-11  0:00                 ` Mike Roske
     [not found]               ` <4rvr2j$2gb0@info4.rus.uni-s <nhn30yhw6t.fsf@paralysys>
1996-07-18  0:00                 ` Robert Dewar
1996-07-18  0:00                 ` Kevin D. Quitt
1996-07-26  0:00                 ` Richard Riehle
1996-07-08  0:00             ` C is 'better' than Ada ... NOT!! Hugh Dunne
1996-07-08  0:00               ` Frank Manning
1996-07-08  0:00               ` Kevin D. Quitt
1996-07-12  0:00                 ` C is 'better' than Ada because John F. Bode
1996-07-15  0:00                   ` Sandy McPherson
1996-07-18  0:00                     ` Robert Dewar
1996-07-19  0:00                       ` Theodore E. Dennison
1996-07-19  0:00                     ` Theodore E. Dennison
1996-07-19  0:00                     ` Ken Garlington
1996-07-20  0:00                       ` Michael Feldman
1996-07-21  0:00                         ` Alfonso Urdaneta
1996-07-21  0:00                           ` Robert Dewar
1996-07-22  0:00                             ` Kevin D. Quitt
1996-07-22  0:00                               ` Robert Dewar
1996-07-26  0:00                               ` Richard Riehle
     [not found]                             ` <31f3c52e.238719470 <Pine.GSO.3.92.960726122347.25896E-100000@nunic.nu.edu>
1996-07-31  0:00                               ` Darrin Smith
1996-07-31  0:00                                 ` Fergus Henderson
1996-08-01  0:00                                 ` Jerry van Dijk
1996-08-06  0:00                                   ` Kirk Bradley
1996-08-09  0:00                                   ` Richard Riehle
1996-08-10  0:00                                     ` Craig Franck
1996-08-16  0:00                                       ` Richard Riehle
1996-08-18  0:00                                         ` Craig Franck
     [not found]                                       ` <Pine.GSO.3.92.960816102000. <4v5pis$4h1@mtinsc01-mgt.ops.worldnet.att.net>
1996-08-18  0:00                                         ` David Weller
1996-08-15  0:00                                     ` Mike Stark
1996-08-02  0:00                                 ` Robert Dewar
1996-08-11  0:00                             ` Jon S Anthony
     [not found]                             ` <31f3c52e.238719470 <4uj42h$j06@mtinsc01-mgt.ops.worldnet.att.net>
1996-08-11  0:00                               ` Doug & Rose Miller
1996-08-11  0:00                                 ` Craig Franck
1996-08-11  0:00                                   ` Doug & Rose Miller
1996-08-12  0:00                                     ` Craig Franck
1996-08-16  0:00                                       ` nasser
     [not found]                             ` <31f3c52e.238719470 <4v5pis$4h1@mtinsc01-mgt.ops.worldnet.att.net>
1996-08-18  0:00                               ` Doug & Rose Miller
1996-08-20  0:00                                 ` Craig Franck
1996-07-23  0:00                         ` Ken Garlington
1996-07-27  0:00                       ` Tim Behrendsen
1996-07-27  0:00                         ` Lawrence Kirby
1996-07-29  0:00                         ` Ian Ward
1996-07-30  0:00                         ` Bob Cousins
1996-07-30  0:00                           ` Robert Dewar
1996-09-05  0:00                             ` Bob Cousins
1996-08-13  0:00                       ` Jon S Anthony
1996-08-14  0:00                         ` Craig Franck
1996-08-28  0:00                           ` Van Snyder
1996-08-14  0:00                       ` Jon S Anthony
1996-08-15  0:00                         ` Craig Franck
1996-08-15  0:00                           ` Joe Gwinn
1996-08-16  0:00                             ` Don Nelson
1996-08-19  0:00                               ` Joe Gwinn
1996-08-19  0:00                                 ` Ken Garlington
1996-08-28  0:00                         ` Van Snyder
1996-08-30  0:00                           ` Norman H. Cohen
1996-08-15  0:00                       ` Stefan 'Stetson' Skoglund
1996-08-15  0:00                       ` Jon S Anthony
1996-08-20  0:00                         ` nasser
1996-08-15  0:00                     ` David Weller
1996-08-15  0:00                       ` William  C Brennan
1996-07-08  0:00             ` Ian Ward
1996-07-18  0:00               ` Hamilton Link
1996-07-19  0:00                 ` Kevin D. Quitt
1996-07-10  0:00             ` Stephen M O'Shaughnessy
1996-07-10  0:00               ` Peter Seebach
1996-07-18  0:00             ` Brian Rogoff
1996-07-19  0:00             ` James A. Squire
1996-07-29  0:00             ` William Clodius
1996-07-30  0:00               ` Robert Dewar
1996-07-31  0:00                 ` Tim Behrendsen
     [not found]                   ` <9608020139.AA29105@pulsar.telesoft>
1996-08-02  0:00                     ` Tim Behrendsen
1996-08-05  0:00                       ` Kevin D. Quitt
1996-08-06  0:00                         ` is Ada 'better' than C? (Was: Re: C is 'better' than Ada because...) Antoine Leca
1996-08-06  0:00                           ` Kevin D. Quitt
1996-07-30  0:00               ` C is 'better' than Ada because Richard A. O'Keefe
1996-07-30  0:00                 ` Tim Behrendsen
1996-08-01  0:00                   ` Byron B. Kauffman
1996-08-01  0:00                     ` Ian Ward
1996-07-31  0:00               ` Ralph Silverman
1996-07-30  0:00             ` William Clodius [this message]
1996-08-01  0:00               ` Tim Behrendsen
1996-07-30  0:00             ` Robert I. Eachus
1996-08-01  0:00               ` David Wheeler
1996-08-01  0:00             ` Olivier Devuns @pulsar
1996-08-11  0:00             ` Jon S Anthony
1996-08-12  0:00               ` Craig Franck
1996-08-12  0:00                 ` James A. Squire
1996-08-12  0:00                   ` Craig Franck
1996-08-12  0:00                 ` John Howard
1996-08-13  0:00                   ` Craig Franck
1996-08-13  0:00                     ` Ken Garlington
1996-08-14  0:00                       ` Craig Franck
1996-08-14  0:00                 ` Stephen M O'Shaughnessy
1996-08-14  0:00                 ` Stephen M O'Shaughnessy
     [not found]                 ` <Pine.GS <gwinn-1908961215100001@smc19.ed.ray.com>
1996-08-19  0:00                   ` Adam Beneschan
1996-08-11  0:00             ` Ada 95 is a FREE language (was: C is 'better' than Ada because...) Laurent Guerby
1996-08-13  0:00             ` C is 'better' than Ada because Jon S Anthony
1996-08-13  0:00             ` Jon S Anthony
1996-08-14  0:00             ` Norman H. Cohen
1996-08-19  0:00             ` Jon S Anthony
1996-08-20  0:00               ` Craig Franck
1996-08-20  0:00             ` Jon S Anthony
1996-08-21  0:00               ` Craig Franck
1996-08-27  0:00             ` Valentin Bonnard
1996-07-06  0:00         ` Walter B. Hollman Sr.
1996-07-05  0:00       ` Jon S Anthony
1996-07-08  0:00         ` Peter Hermann
1996-07-09  0:00           ` Dirk Dickmanns
1996-07-12  0:00       ` ntxbow
1996-07-15  0:00         ` Kevin D. Quitt
1996-07-15  0:00           ` Robert Dewar
1996-07-16  0:00           ` Ian Ward
1996-07-17  0:00             ` Dale Stanbrough
1996-07-23  0:00       ` Jon S Anthony
1996-07-29  0:00       ` William Clodius
1996-07-31  0:00       ` Darin Johnson
1996-08-01  0:00         ` Tim Behrendsen
1996-08-01  0:00       ` Jon S Anthony
1996-08-01  0:00       ` Jon S Anthony
1996-08-05  0:00       ` Stefan 'Stetson' Skoglund
1996-08-16  0:00       ` Jon S Anthony
1996-07-01  0:00 ` James A. Squire
1996-07-02  0:00 ` Darin Johnson
1996-07-03  0:00   ` If your only tool is a hammer, all your problems look like nails (was Re: C is 'better' than Ada because...) Bruce Clement
  -- strict thread matches above, loose matches on Subject: below --
1996-07-30  0:00 C is 'better' than Ada because Spasmo
     [not found] ` <01bb7e29$61e3d260$87ee6fce@timpent.airshields.com>
1996-07-31  0:00   ` Bob Kitzberger
1996-07-31  0:00     ` Tim Behrendsen
1996-07-31  0:00 ` Jon S Anthony
1996-08-01  0:00   ` Tim Behrendsen
1996-08-02  0:00     ` Ralph Silverman
1996-08-01  0:00 William Clodius
1996-08-03  0:00 ` Tim Behrendsen
1996-08-05  0:00   ` Kevin D. Quitt
1996-08-05  0:00 ` Stefan 'Stetson' Skoglund
1996-08-05  0:00 ` William Clodius
1996-08-01  0:00 Tim Behrendsen
1996-08-02  0:00 ` Mark McKinney
1996-08-02  0:00 ` David Bonham
     [not found] ` <9608061851.AA17508@camo.brc.shell.com>
1996-08-06  0:00   ` Tim Behrendsen
1996-08-04  0:00 @#$%!?!
     [not found] <Pine.GSO.>
     [not found] ` <4 <4vb399$kt8@mtinsc01-mgt.ops.worldnet.att.net>
1996-08-20  0:00   ` Adam Beneschan
1996-08-20  0:00     ` Craig Franck
1996-08-21  0:00     ` Mike Roske
1996-08-21  0:00       ` William  C Brennan
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox