comp.lang.ada
 help / color / mirror / Atom feed
From: sampson@cod.nosc.mil  (Charles H. Sampson)
Subject: Re: Data Overlays
Date: 17 Aug 93 15:16:00 GMT	[thread overview]
Message-ID: <1993Aug17.151600.18557@nosc.mil> (raw)

In article <1993Aug13.124835.18422@iplmail.orl.mmc.com> rgilbert@orl.mmc.com wr
ites:
>
>Many times I have wanted to create two different types to look at the
>same object.  An example might be a record structure which is to be
>output via some DMA device which expects the data to look like an 
>array of bytes.  Anyway I've come up with two different methods to
>implement this.
>
>Method 1 :  Use an access type of one of the types and assign the address
>            (using unchecked conversion) of the object declare of the
>            other type.
>
> [Example deleted]
>
>Method 2:  Just use a representation clause to map one of the objects to the
>           address of the other.
>
>      X : SAMPLE_REC_TYPE;
>      Y : BYTE_ARRAY_TYPE;
>      for Y use at X'address;
>
>   This seems to be much more straight forward and makes no assumptions about
>   the implementation.  But when this method is used a compiler (Telesoft)
>   warning is issued to the affect that the representation clause should not
>   be used to produce overlayed data?
>
>Question:  Which of the above methods is prefered?  Is there a better way?

     If you truly have to look at the data structure from two different
aspects, use Unchecked_conversion.  That's what it's there for.  There
seems to be an opinion circulating that Unchecked_conversion is a feature
of Ada that should never be used.  Not so.  It's in the language precisely
for the kind of situation described.  On the other hand, it should not be
used for some cutesy trick whose effect can be easily achieved in some
other, more portable, fashion.

     There are some portability considerations, because the exact rules on
which types can participate in unchecked conversions are implementation
dependent.  In my experience, compilers allow unchecked conversions between
most types of the same size.  I'm sure there are exceptions to my experience.

     I don't see any advantage in using Unchecked_conversion on the access
types instead of the record structures themselves.  The indirection adds a
level of obscurity, whereas a straightforward use of Unchecked_conversion
says, "Hey, look.  I'm approaching this bucket of bits from a different
point of view."

     As for creating an overlay by using an address clause, here's the kind
of problem you could get into.  Consider the following very simplified
example:

          X : Integer;
          Y : Integer:
          FOR X USE AT Y'Address;

          X := 1;
          ...
          IF Y = 1 THEN ...

It might be that your compiler, using standard code generation techniques,
is using a delayed store on the value of X, which means basically that the
1 is held in a register for a period of time rather than being immediately
placed into the memory location of X.  As a result, Y does not have the
expected value when the IF statement is executed.  Since the overlaying has
created an erroneous program, the compiler writers are not obligated to
take it into account in their code generation schemes, which is a blessing
if you've every had to consider all the side effects of overlaying.  As a
matter of fact, since this program is erroneous, the compiler writers are
legally allowed to do bizarre things, such as erasing your disk, but that's
another story.

                              Charlie

             reply	other threads:[~1993-08-17 15:16 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1993-08-17 15:16 Charles H. Sampson [this message]
  -- strict thread matches above, loose matches on Subject: below --
1993-09-01 14:36 Data Overlays David Emery
1993-09-01  4:23 Jim Lonjers
1993-08-31 20:36 dog.ee.lbl.gov!agate!howland.reston.ans.net!math.ohio-state.edu!magnus.ac
1993-08-31  3:51 Jim Lonjers
1993-08-23 14:17 Bob Crispen
1993-08-23 14:11 Alex Blakemore
1993-08-19 13:16 cs.utexas.edu!mars.tsd.arlut.utexas.edu!gardner
1993-08-19  2:18 portal!cup.portal.com!R_Tim_Coslet
1993-08-18 16:40 cis.ohio-state.edu!magnus.acs.ohio-state.edu!csn!news.den.mmc.com!iplmail
1993-08-18 16:27 Charles H. Sampson
1993-08-18 16:04 Charles H. Sampson
1993-08-18 12:55 cis.ohio-state.edu!magnus.acs.ohio-state.edu!csn!news.den.mmc.com!iplmail
1993-08-18 12:50 cis.ohio-state.edu!math.ohio-state.edu!howland.reston.ans.net!europa.eng.gtefsd.com!fs7.ece.cmu.edu!news.sei.cmu.edu!firth
1993-08-18  2:11 cis.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!agate!do
1993-08-18  1:53 cis.ohio-state.edu!magnus.acs.ohio-state.edu!math.ohio-state.edu!howland.
1993-08-18  0:39 cis.ohio-state.edu!magnus.acs.ohio-state.edu!math.ohio-state.edu!cs.utexa
1993-08-13 17:57 cgl!sgiblab!darwin.sura.net!mlb.semi.harris.com!x102a!scook
1993-08-13 12:48 Bob Gilbert
replies disabled

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