comp.lang.ada
 help / color / mirror / Atom feed
From: Robert Dewar <robert_dewar@my-deja.com>
Subject: Re: Ada Core Technologies announces GNATCOM
Date: 2000/04/12
Date: 2000-04-12T00:00:00+00:00	[thread overview]
Message-ID: <8d2csa$1hm$1@nnrp1.deja.com> (raw)
In-Reply-To: 8d1paa$n0n4@ftp.kvaerner.com

In article <8d1paa$n0n4@ftp.kvaerner.com>,
  "Tarjei T. Jensen" <tarjei.jensen@kvaerner.com> wrote:
> It is not neccessarily all bad. I would not be surprised if
> there exists a C compilers which would pass a struct as value
> if it is smaller than 4 or 8 bytes and pass them by reference
> if they are bigger. I seem to remember having read
> about such a convention.


You are confusing pass by reference (which is NEVER used in
C calling sequences) and pass by address (which is often used
in C calling sequences for large values, in fact one cannot
think of any other approach, the typical thing being to pass
the address of a copy.

But that's NOT what the Ada RM requires, it requires that
it be passed by reference, which has totally different
semantics.

Indeed the quoted paragraph above is EXACTLY the confusion
that caused this unsupportable design of the C_Pass_By_COpy
pragma in the first place.

There is a big difference between call by reference, where a
modification to the parameter in the C routine will cause
a change to the original, and call by address of a copy,
which will not have this effect.

Yes, its confusing, and this confusion is what lead to the
mistake

  a) in the RM, which requires IN records to be passed by
     reference instead of value.

  b) in the design of the C_Pass_By_Copy pragma, which
     extends the confusion.

Unfortunately, there is nothing much we can do at this stage
except live with a little mess here, luckily cases where C
programmers pass records as parameters (as opposed to pointers
to records) are rare.


Sent via Deja.com http://www.deja.com/
Before you buy.




  reply	other threads:[~2000-04-12  0:00 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-04-07  0:00 Ada Core Technologies announces GNATCOM Robert Dewar
2000-04-07  0:00 ` Ted Dennison
2000-04-07  0:00 ` Vladimir Olensky
2000-04-08  0:00   ` Robert Dewar
2000-04-08  0:00 ` Tom Hargraves
2000-04-08  0:00   ` David
2000-04-08  0:00   ` Robert Dewar
2000-04-08  0:00   ` David Starner
2000-04-08  0:00 ` tmoran
2000-04-08  0:00   ` Robert Dewar
2000-04-09  0:00     ` tmoran
2000-04-09  0:00       ` Robert Dewar
2000-04-09  0:00       ` Larry Kilgallen
2000-04-09  0:00         ` Marin D. Condic
2000-04-09  0:00           ` Brian Rogoff
2000-04-09  0:00             ` David Starner
2000-04-10  0:00               ` Gisle S�lensminde
2000-04-10  0:00                 ` Hyman Rosen
2000-04-11  0:00                   ` Gisle S�lensminde
2000-04-11  0:00                     ` Hyman Rosen
2000-04-10  0:00             ` Marin D. Condic
2000-04-09  0:00         ` Robert Dewar
2000-04-09  0:00         ` tmoran
2000-04-09  0:00         ` Robert Dewar
2000-04-11  0:00         ` Tucker Taft
2000-04-09  0:00     ` tmoran
2000-04-12  0:00       ` Robert Dewar
2000-04-12  0:00         ` C_Pass_By_Value, was " tmoran
2000-04-12  0:00         ` Tarjei T. Jensen
2000-04-12  0:00           ` Robert Dewar [this message]
2000-04-12  0:00             ` Robert A Duff
2000-04-13  0:00               ` Robert Dewar
2000-04-13  0:00                 ` Robert A Duff
2000-04-15  0:00                   ` Robert Dewar
2000-04-12  0:00           ` David Botton
2000-04-12  0:00             ` Robert Dewar
2000-04-12  0:00               ` DuckE
2000-04-13  0:00                 ` Robert Dewar
2000-04-12  0:00               ` David Botton
2000-04-12  0:00                 ` Hyman Rosen
2000-04-12  0:00                   ` David Botton
2000-04-13  0:00                     ` Robert Dewar
2000-04-14  0:00                       ` Geoff Bull
2000-04-14  0:00                         ` dale
2000-04-13  0:00                     ` Tarjei T. Jensen
2000-04-13  0:00                 ` Robert Dewar
2000-04-08  0:00   ` David Botton
replies disabled

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