comp.lang.ada
 help / color / mirror / Atom feed
From: Richard Riehle <richard@adaworks.com>
Subject: Re: proposal for new assignment operators
Date: Tue, 15 Jul 2003 20:14:24 -0700
Date: 2003-07-16T03:11:01+00:00	[thread overview]
Message-ID: <3F14C30F.52A2010@adaworks.com> (raw)
In-Reply-To: pXoQa.8407$Y92.6997@nwrdny01.gnilink.net

Hyman Rosen wrote:

> Richard Riehle wrote:
>

> > Container types, perhaps not those you have created, are often designed
> > as limited types.   There are different points-of-view on this.   I recall
> > a PhD dissertation from OSU on this subject where the dissertation
> > recommended that all types for a container be limited, even the generic
> > formal parameters.
>
> But this is not how Ada arrays work, so why should other containers
> work that way? In C++, the standard containers all support assignment,
> with the semantics of making the target of the assignment compare
> equal to the source after the assignment happens (which means that the
> two containers will have the same size, and the elements will compare
> equal).

Well, actually,  container types  constructed from arrays are often designed
as limited private.   In fact, it is frequently desirable to keep direct
visibility to the
array away from the client of that array, even when the client knows the
underlying
structure is an array.

> > Exactly.  This is one reason for not providing assignment over a limited
> > type.   Instead, we typically create a copy procedure and declare the
> > name of that copy procedure as specifically as possible.
>
> In C++, that procedure is just called "operator=". We can program
> assignment from arbitrary source types if we choose, by using templates.

One problem with overloading the assignment operation is that the user
of that assignment cannot know, except via the documentation, what the
outcome will be.   For a limited type, when we declare a procedure, we
can give the procedure a name that makes clear the expected outcome.

           procedure Copy_BitWise(Source : in T;  Target : out T);

           procedure Copy_Shallow(Source : in T;  Target : out T);

and so forth.  While this might seem a little extreme, I rarely encounter
anyone who is  confused by a procedure where the exact behavior is
declared in its name.

If we overload assignment, we still find ourselves with no idea of what
is really going on when we assign a to b.   This is also true of overloading
the equality operator for a composite type, particularly one that includes
access values in its definition.

I prefer limited types, even though they are slightly more work to define,
and even though I have to think ahead a lot more when designing with
them.

Matthew Heaney has correctly pointed out that the idiom is possible in
C++.  Mr. Rosen has noted that there are places in C++ where the types
are roughly equivalent to limited types.   Even so, the power of limited
types ought not be underestimated as a feature of Ada that encourages
the design of safe abstractions.

Richard Riehle








  reply	other threads:[~2003-07-16  3:14 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-25  6:23 proposal for new assignment operators Russ
2003-06-25  8:49 ` Preben Randhol
2003-06-25 10:28 ` Dmitry A. Kazakov
2003-06-25 10:36   ` Lutz Donnerhacke
2003-06-25 17:49     ` Dmitry A. Kazakov
2003-06-26 10:37       ` Lutz Donnerhacke
2003-06-27  8:15         ` Dmitry A. Kazakov
2003-06-27 14:21           ` Hyman Rosen
2003-06-25 19:17   ` Russ
2003-06-25 10:39 ` Larry Kilgallen
2003-06-25 12:06   ` Preben Randhol
2003-06-25 13:40     ` Peter Hermann
2003-06-25 22:12     ` Georg Bauhaus
2003-06-26  8:03       ` Preben Randhol
2003-06-26  8:25         ` Vinzent Hoefler
2003-06-26 15:02       ` Stephen Leake
2003-06-26 17:54         ` Georg Bauhaus
2003-06-26 18:32           ` Stephen Leake
2003-06-27 13:21             ` Georg Bauhaus
2003-06-26 16:32       ` Preben Randhol
2003-06-26 17:41         ` Georg Bauhaus
2003-06-26 17:58           ` Preben Randhol
2003-06-26  2:36     ` Steve
2003-06-26  2:33   ` Russ
2003-06-26 23:02     ` John R. Strohm
2003-06-25 14:07 ` Frank J. Lhota
2003-06-25 16:27   ` Warren W. Gay VE3WWG
2003-06-26  3:09     ` Russ
2003-06-26  6:27       ` Vinzent Hoefler
2003-06-26 10:49       ` Larry Kilgallen
2003-06-26 18:08         ` Russ
2003-06-26 18:19           ` Preben Randhol
2003-06-26 18:45           ` Larry Kilgallen
2003-07-02 15:57             ` Kevin Cline
2003-07-02 17:10               ` tmoran
2003-07-02 18:27                 ` Hyman Rosen
2003-07-02 20:20                   ` tmoran
2003-07-03  1:48               ` Richard Riehle
2003-07-03  3:07                 ` Hyman Rosen
2003-07-03  5:12                   ` Randy Brukardt
2003-07-03 13:03                     ` Hyman Rosen
2003-07-03 14:46                   ` Stephen Leake
2003-07-04  1:17                   ` James Rogers
2003-07-07  4:29                     ` Hyman Rosen
2003-07-08  1:10                       ` James Rogers
2003-07-08 13:59                         ` Hyman Rosen
2003-07-09  0:12                           ` James Rogers
2003-07-09  3:00                             ` Hyman Rosen
2003-07-07 15:36                 ` Matthew Heaney
2003-07-14  1:39                   ` Richard Riehle
2003-07-14  2:54                     ` Hyman Rosen
2003-07-16  3:14                       ` Richard Riehle [this message]
2003-06-27 13:34       ` Georg Bauhaus
2003-06-27 23:12         ` Russ
2003-06-27 23:21           ` Larry Kilgallen
2003-06-28 18:51             ` Russ
2003-06-27 18:02       ` Warren W. Gay VE3WWG
2003-06-28  3:50         ` Russ
2003-06-30 15:58           ` Warren W. Gay VE3WWG
2003-06-25 19:44 ` Bill Findlay
2003-06-26  2:06   ` Russ
2003-06-26  2:33     ` Bill Findlay
2003-06-26  5:54     ` Karel Miklav
2003-06-26 12:17     ` Georg Bauhaus
2003-06-26 12:52     ` Joseph Dalton
2003-06-26 18:11     ` Frank J. Lhota
  -- strict thread matches above, loose matches on Subject: below --
2003-06-27  5:35 christoph.grein
2003-06-27  9:57 ` Preben Randhol
2003-06-27 14:11 ` Georg Bauhaus
replies disabled

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