comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@acm.org>
Subject: Re: Default rep specs for record types - documented??
Date: Sat, 05 Nov 2005 05:25:19 -0500
Date: 2005-11-05T05:25:19-05:00	[thread overview]
Message-ID: <uoe4z75o0.fsf@acm.org> (raw)
In-Reply-To: plMaf.40$w_6.36@trndny09

"Frank J. Lhota" <NOSPAM.lhota@adarose.com> writes:

> Stephen Leake wrote:

>> 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. 

No, the fault lies with me, who wrote the code. The code is, as you
point out, wrong.

Part of the point of using Ada is to make it harder to make mistakes
like this. That's why I want a warning when I make this mistake.

> 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?

Of course; that is the point of rep clauses. Which is why the code is
wrong.

> 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.

This is _not_ internal data; that's why there is a rep clause.

> 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.

The compiler can't protect me entirely, but it can easily warn me
about this particular mistake; leaving a component out of the rep
clause.

Compare this to a case statement on an enumeration type; the compiler
warns you when you add an enumeral but forget to update the case
statement.

Programmers should be careful, but the compiler should help whenever
it reasonably can.

>> 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.

Right, and I could integrate that with Emacs. But I'd rather go all
the way and have the compiler do everything for me.

More importantly, I want the compiler to generate the "reasonable
packed rep clause", not "the most efficient for data storage" or
whatever other criteria it uses in the absence of a rep clause. 

This matters more when I'm describing bit fields in a register;
without a rep clause the compiler will use at least a byte for each
field. So the generated rep clause will not be a very good starting
point.

-- 
-- Stephe



  parent reply	other threads:[~2005-11-05 10:25 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
2005-11-04 16:57           ` Frank J. Lhota
2005-11-04 23:27           ` tmoran
2005-11-05 10:25           ` Stephen Leake [this message]
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