comp.lang.ada
 help / color / mirror / Atom feed
From: "Frank J. Lhota" <NOSPAM.lhota@adarose.com>
Subject: Re: Default rep specs for record types - documented??
Date: Fri, 04 Nov 2005 16:52:37 GMT
Date: 2005-11-04T16:52:37+00:00	[thread overview]
Message-ID: <plMaf.40$w_6.36@trndny09> (raw)
In-Reply-To: <uy844sci9.fsf@acm.org>

Stephen Leake wrote:
> I've submitted the following to AdaCore:
> 
> I had a record:
> 
> record_byte_length : constant := 4;
> 
> type Record_Type is record
>     field_1 : Integer_16;
>     field_2 : Integer_16;
> end record;
> 
> for record_type use record
>     Field_1 at 0 range 0 .. 15;
>     field_2 at 2 range 0 .. 15;
> end record;
> for record_type'size use record_byte_length * 8;

I would recommend writing the 'Size rep clause as follows:

	for record_type'size use 2 * Integer_16'Size;

Then we can skip the record_byte_length declaration.

> Then I needed to add a field, which should go before the others:
> 
> record_byte_length : constant := 6;
> 
> type Record_Type is record
>     field_0 : Integer_16;
>     field_1 : Integer_16;
>     field_2 : Integer_16;
> end record;
> 
> for record_type use record
>     Field_1 at 0 range 0 .. 15;
>     field_2 at 2 range 0 .. 15;
> end record;
> for record_type'size use record_byte_length * 8;
> 
> 
> I forgot to add Field_0 to the rep clause, and the compiler put it at
> the end (where it didn't belong). Most importantly, the compiler
> didn't warn me.

The fault lies with the code, not the compiler. Where in this code is 
there any indication that Field_0 "does not belong" at the end? This 
representation clause requires that Field_1 and Field_2 occupy the first 
four bytes of the record, so where else *could* the compiler place 
field_0 besides the end?

The raison d'�tre behind record representation clauses is to make sure 
that a record layout matches some external data format. For internal 
data, you would be better off forgoing the representation clauses and 
letting the compiler choose the optimal record layout.

Now the Ada compiler cannot possibly know anything about external data 
formats. The programmer must therefore be especially careful in coding 
the representation clause, for this is the compiler's only clue as to 
the desired record layout. Writing a bad representation clause is one of 
the errors that the compiler cannot reasonably protect the protect the 
programmer from making.

> One solution is to have the compiler write the representation clause
> for me; in this case, if we make reasonable assumptions about
> 'record_type', there is only one reasonable rep clause. 

Both ObjectAda and GNAT have options by which Ada representation clauses 
are generated for all record declarations in the sources. These compiler 
generated representation clauses can serve as a good starting point, but 
it is still up to the programmer to make the needed modifications in 
order to get the required data layout.

-- 
"All things extant in this world,
Gods of Heaven, gods of Earth,
Let everything be as it should be;
Thus shall it be!"
- Magical chant from "Magical Shopping Arcade Abenobashi"

"Drizzle, Drazzle, Drozzle, Drome,
Time for the this one to come home!"
- Mr. Lizard from "Tutor Turtle"



  parent reply	other threads:[~2005-11-04 16:52 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-04  2:21 Default rep specs for record types - documented?? Anonymous Coward
2005-11-04  2:36 ` Steve
2005-11-04  4:11   ` Anonymous Coward
2005-11-04  5:30     ` Jeffrey R. Carter
2005-11-05  3:13       ` Steve
2005-11-05  4:45         ` Jeffrey R. Carter
2005-11-06 14:05           ` Steve
2005-11-06 16:08             ` Anonymous Coward
2005-11-07  7:25             ` Jeffrey R. Carter
2005-11-08 13:36               ` Steve
2005-11-14  1:12             ` Robert A Duff
2005-11-14  3:03               ` Anonymous Coward
2005-11-14 18:08                 ` Jeffrey R. Carter
2005-11-14 18:49                 ` Robert A Duff
2005-11-15  1:16                   ` ADA compilers can reject types arbitrarily? Anonymous Coward
2005-11-15  2:10                     ` tmoran
2005-11-15  3:12                     ` Robert A Duff
2005-11-15  6:44                     ` Simon Wright
2005-11-16  0:16                       ` Adaists Deny Acronym. (was: ADA compilers can reject types arbitrarily?) Björn Persson
2005-11-16  5:38                         ` Adaists Deny Acronym Simon Wright
2005-11-16  6:16                         ` Adaists Deny Acronym. (was: ADA compilers can reject types arbitrarily?) Samuel Tardieu
2005-11-15 12:43                     ` ADA compilers can reject types arbitrarily? Jeff Creem
2005-11-14 21:14                 ` Default rep specs for record types - documented?? Simon Wright
2005-11-04 13:26     ` Stephen Leake
2005-11-04 14:33       ` Marc A. Criley
2005-11-04 18:35         ` Georg Bauhaus
2005-11-04 20:07           ` Britt Snodgrass
2005-11-04 14:39       ` Stephen Leake
2005-11-04 15:27         ` Britt Snodgrass
2005-11-04 15:55           ` Lauri Ora
2005-11-04 21:42             ` Larry Kilgallen
2005-11-05  2:26             ` Anonymous Coward
2005-11-05  2:42               ` Frank J. Lhota
2005-11-05  3:27               ` Ed Falis
2005-11-05  3:55                 ` Anonymous Coward
2005-11-05  4:07                 ` Lauri Ora
2005-11-05 13:46                   ` Ed Falis
2005-11-05 10:14                 ` Stephen Leake
2005-11-04 16:52         ` Frank J. Lhota [this message]
2005-11-04 16:57           ` Frank J. Lhota
2005-11-04 23:27           ` tmoran
2005-11-05 10:25           ` Stephen Leake
2005-11-14  1:09             ` Robert A Duff
2005-11-05  3:33       ` Anonymous Coward
2005-11-05 10:34         ` Stephen Leake
2005-11-05 16:35           ` ADA/C interfaces: type representations uncontrollable in C Anonymous Coward
2005-11-05 16:49             ` Ed Falis
2005-11-05 18:24             ` tmoran
2005-11-09  2:12           ` 'Size can mean value size OR object size, depending Anonymous Coward
2005-11-09  3:27             ` Jeffrey R. Carter
2005-11-09  4:04               ` Anonymous Coward
2005-11-05 14:27         ` Default rep specs for record types - documented?? Michael Bode
2005-11-05 16:17           ` pragma convention Anonymous Coward
2005-11-06  1:07             ` Jeffrey R. Carter
2005-11-06 22:22               ` Anonymous Coward
2005-11-07  7:34                 ` Jeffrey R. Carter
2005-11-05 14:39         ` Default rep specs for record types - documented?? Martin Krischik
2005-11-04  9:40   ` Martin Dowie
2005-11-04 14:36   ` Marc A. Criley
2005-11-04 17:45 ` Martin Krischik
replies disabled

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