comp.lang.ada
 help / color / mirror / Atom feed
From: Michal Nowak <vinnie@inetia.pl>
Subject: Re: Discriminant name must be alone
Date: Wed, 25 Dec 2002 15:29:27 +0100
Date: 2002-12-25T15:29:27+01:00	[thread overview]
Message-ID: <mailman.1040826002.18989.comp.lang.ada@ada.eu.org> (raw)
In-Reply-To: <wccadiz0y2j.fsf@shell01.TheWorld.com>

On 2002-12-21 at 23:08 Robert A Duff wrote:

>Michal Nowak <vinnie@inetia.pl> writes:
>
>> Hello all,
>> 
>> Digging around (teaching myself and experimenting with Ada)
>> I wandered to RM 3.8 (12):
>
>I suggest using a textbook (perhaps Barnes) to learn Ada, rather than
>the RM.  Unless you're very comfortable reading all the legalese in the
>RM (and AARM)...

That's OK, I got Cohen's superior "Ada as a Second Language". The rule
I was referring to is described in point 9.2.4 (Allowable use of 
discriminants), but there was no explanation of internal matters 
and why it is like that.

>
>The implementation issue is not just "potential".
>It really does simplify implementation to know that the bound
>can be computed by a simple fetch of the discriminant.
>

[snip some of my questions]

>
>Most uses have no problem with the current rule.  The usual thing is
>that the discriminant is the upper bound of an array.  Not 10 less than
>the upper bound, or some other convolution.
>
>However, I have run into a few cases where I would like to do what
>you're suggesting here.  For example, I wrote a "storage pool" type,
>where the private part defined the storage as an array of machine words.
>The allocated types were known to be always word aligned, and always a
>multiple of word size.  The array of words makes alignment easy, and the
>Allocate procedure can simply return 'Address of one of the array
>components.  But I wanted the client to specify the size in
>Storage_Elements.  So the array would have to be:
>
>    Storage: Word_Array(0..(Size_In_Bytes-1)/4); -- Illegal!
>
>where Size_In_Bytes is the discriminant.  Or something like that.


I forget to mention, that I had immutable records in mind, this
issue is more complicated with mutable records.

I think one time I wanted an array, which was a component of record,
to start at specified index, but the discriminant was Size. It was
impossible to compute ending bound.

>I think the main problem with allowing that (besides what the AARM
>mentions) is that if you allow arbitrary expressions referring to
>discriminants, you have to worry about when that expression is
>evaluated.  Suppose that expression is "F(Size_In_Bytes)", where F is
>some function that might have side effects.  If it has side effects, it
>might return a different answer each time it's called.
>
>I suppose one answer is to say that the expression is evaluated whenever
>a value of the record type is created.  The value of that expression
>must be saved as "dope" -- a hidden record component created by the
>compiler.  If it has side effects, that's the programmer's problem.
>This would be the first case where a compiler is required to store
>dope.  Some compilers store dope, but it's never required.

Now I get the point. 

Thank you for answer and explanations,
Merry Christmas,
   - Michal



-- -----------------------------------------------------------------
-- * ___  *     _'  '   *    `        *   `     *      '      .
--  / _ \  ' * | |    *   *      *                           ~*~
-- | |_| |  ___| | * _____    `      *  `  *       *    `   i/:\i
-- |  _ *| | __  |  | __' |   *                            i/`:'\i
-- |_| |_| |____*|_ |_____|_  Christmas with Ada:  `      i/`':`'\i
--   *      '       http://www.autopen.com/OTANBAUM.shtml '^^^I^^^'
-- -----------------------------------------------------------------








      parent reply	other threads:[~2002-12-25 14:29 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-21 19:22 Discriminant name must be alone Michal Nowak
2002-12-21 23:08 ` Robert A Duff
2002-12-23 11:21   ` Dmitry A. Kazakov
2002-12-23 14:00     ` Robert A Duff
2002-12-24 11:16       ` Dmitry A. Kazakov
2002-12-25 14:29   ` Michal Nowak [this message]
replies disabled

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