comp.lang.ada
 help / color / mirror / Atom feed
From: Tucker Taft <stt@averstar.com>
Subject: Re: Ragged Array Proposal
Date: 1999/09/23
Date: 1999-09-23T00:00:00+00:00	[thread overview]
Message-ID: <37EA4E91.1D4D1FC@averstar.com> (raw)
In-Reply-To: m3vh922o3u.fsf@vault80.infomatch.bc.ca

Ray Blaak wrote:
> 
> Ted Dennison <dennison@telepath.com> writes:
> > Also for your example you say "the various ways of doing the equivalent
> > thing in Ada 95 are all unappealing." I but I can do the equivalent
> > thing in Ada 95 in only 2 more lines of code:
> >
> >    type Command_String_Ptr is access all String;
> >    for Command_String_Ptr'Storage_Size use 1024;
> >
> >    type Command is (Cut, Copy, Paste, ...);
> >
> >    Labels: constant array (Command) of Command_String_Ptr :=
> >       (Cut      => new String'("Cu&t"),
> >        Copy     => new String'("&Copy"),
> >
> >        Paste    => new String'("&Paste"),
> >        ...);
> 
> The problem with this approach is that the data is duplicated. It is both in
> the static data area of the program (i.e. the string constants), and in the
> heap.

If you change Command_String_Ptr to be "access constant String;" then
the recommended implementation does *not* duplicate the static data.
It is link-time allocated and initialized.  This might vary by compiler,
but anything having to do with link-time initialization is an "optimization,"
so that is true even for static constants.  I know at least that the
Aonix and Green Hills Ada 95 compilers statically allocate and initialize
allocators for access-to-constant types.  I haven't checked GNAT.

> In Ada95, to avoid duplicating the data, the approach is tedious (i.e. having
> an aliased constant for each string, and assigning their 'Access values into
> the array).

As mentioned above, that is not necessary if the type is access-to-constant
(which it must be if you are using 'Access on aliased constants).
Take a look at the generated code for new String'("xxx") when the type
is access-to-constant.  It should not involve any run-time code (presuming
the implementation advice was followed by the compiler implementor).
> > --
> Cheers,                                        The Rhythm is around me,
>                                                The Rhythm has control.
> Ray Blaak                                      The Rhythm is inside me,
> blaak@infomatch.com                            The Rhythm has my soul.

-- 
-Tucker Taft   stt@averstar.com   http://www.averstar.com/~stt/
Technical Director, Distributed IT Solutions  (www.averstar.com/tools)
AverStar (formerly Intermetrics, Inc.)   Burlington, MA  USA




  reply	other threads:[~1999-09-23  0:00 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <37e7c08e@eeyore.callnetuk.com>
1999-09-22  0:00 ` Ragged Array Proposal Ted Dennison
1999-09-22  0:00   ` Ray Blaak
1999-09-23  0:00     ` Tucker Taft [this message]
1999-09-23  0:00       ` Nick Roberts
1999-09-23  0:00         ` Hyman Rosen
1999-09-24  0:00           ` Nick Roberts
1999-09-24  0:00             ` Hyman Rosen
1999-09-25  0:00               ` Robert Dewar
1999-09-27  0:00                 ` Hyman Rosen
1999-09-27  0:00                   ` Brian Rogoff
1999-09-28  0:00                   ` Robert Dewar
1999-09-24  0:00         ` Ted Dennison
1999-09-24  0:00           ` Nick Roberts
1999-09-24  0:00         ` Robert Dewar
1999-09-24  0:00           ` Wes Groleau
1999-09-25  0:00             ` Robert Dewar
1999-09-25  0:00             ` Robert Dewar
1999-09-24  0:00       ` Robert Dewar
1999-09-23  0:00     ` Ted Dennison
1999-09-24  0:00     ` Robert Dewar
1999-09-23  0:00 ` Robert I. Eachus
1999-09-24  0:00   ` Nick Roberts
1999-09-25  0:00     ` Robert Dewar
1999-09-25  0:00     ` Robert Dewar
1999-09-25  0:00     ` Robert Dewar
1999-09-27  0:00     ` Ted Dennison
1999-09-27  0:00       ` Pascal Obry
1999-09-28  0:00         ` Ted Dennison
1999-09-28  0:00           ` Robert Dewar
1999-09-29  0:00             ` Geoff Bull
1999-09-28  0:00       ` Robert Dewar
replies disabled

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