comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: Limited use for limited with?
Date: Tue, 28 Sep 2010 09:55:47 -0700 (PDT)
Date: 2010-09-28T09:55:47-07:00	[thread overview]
Message-ID: <2d380627-480e-4093-9a0f-a88beb70b189@q28g2000prb.googlegroups.com> (raw)
In-Reply-To: 853314bc-0f79-435f-86a5-d7bcdd610731@c10g2000yqh.googlegroups.com

On Sep 28, 12:37 am, Maciej Sobczak <see.my.homep...@gmail.com> wrote:
> I have found a problem with the intended application of limited with.
>
> Consider a package specifying some object-oriented construct:
>
> package Objects is
>
>    type Object is interface;
>    type Object_Access is access all Object'Class;
>
>    procedure Do_Something (X : in out Object) is abstract;
>
> end Objects;
>
> In such cases I routinely define the XYZ_Access type and later use it
> wherever pointers to class-wide XYZ are needed.
>
> Now consider a package that uses the above in a limited way (pun
> intended), where only pointers to class-wide type are needed:
>
> with Objects;
> package Object_Users is
>
>     procedure Use_Object (X : Objects.Object_Access);
>
> end Object_Users;
>
> The problem is that is some cases it would be more convenient (or just
> more self-documenting from the design perspective) to do limited with
> instead, but unfortunately this makes Object_Access unavailable. It is
> OK to use anonymous access type, at least in some cases like here:
>
>     procedure Use_Object (X : access Objects.Object'Class);
>
> but I find that uncomfortable - after all, the proper access type is
> already defined for exactly this purpose.
>
> In such cases, where the design intent is pretty clear (pass around
> references to Objects) I find that limited with does not really bring
> the functionality that it is supposed to provide.

I'd recommend that you look at the example in the AI (AI95-217-6):

http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ais/ai-50217.txt

and in particular the !example section.  The example there shows two
packages that depend on each other, using "limited with", but neither
package declares an access type that is an access to a type in the
same package.  Instead, the Employees package declares a named access
type whose designated type is in the Departments package; and the
anonymous access types in both packages all refer to types in the
other package.  So the code that you find "uncomfortable" really *was*
the way it was supposed to work, I think.

I can understand that this solution may not have given you a way to
express things the way you might have preferred.  But doing things
"perfectly" was, I believe, unfeasible.  If you look at the !
discussion part of this AI, you'll realize how much effort the ARG put
into trying to come up with a solution that would provide a reasonable
way to solve a real problem while doing so in a way that could be
implemented feasibly by compilers, and in a way so that precise
language rules could be written and that problems that could arise
from using different combinations of features were addressed.  (Note:
I am not an ARG member and was not part of this effort.)  And then you
have to multiply all that effort by seven, because "limited with" was
just one of *seven* different proposed solutions to the mutual
dependence problem, and all of them received extensive consideration.

So it really rubs me the wrong way to see comments---not from you, but
from someone else---such as "Ada2012 should relax rules to make
limited with more useful."  Perhaps it's because I'm reaching the
Grumpy-Old-Fart-In-Training phase of my life.  But given the amount of
work the ARG put into this over a number of years, can't we at least
assume that they did the best they could to make it as useful as they
could, and that whatever rules are there that you don't like are there
for a very good reason?  Jeesh, now I sound like I'm talking to my
teenager.  Definitely headed for G.O.F. at full speed.

I'm certainly not opposed to people wanting changes in the language
(although it's too late for Ada 2012); but in this case, I'd recommend
that if anyone wants to see this change, they should read the
discussions in all the AI95-217 options (AI95-217-1 through 7) to make
sure they understand all the issues, and then propose something
specific.

OK, I'm done ranting.  For now.

                                -- Adam





  parent reply	other threads:[~2010-09-28 16:55 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-28  7:37 Limited use for limited with? Maciej Sobczak
2010-09-28  9:04 ` Alex R. Mosteo
2010-09-30  7:24   ` Stephen Leake
2010-09-30  9:21     ` Alex R. Mosteo
2010-09-28  9:18 ` Ludovic Brenta
2010-09-28 12:59   ` Maciej Sobczak
2010-09-28 13:45     ` Dmitry A. Kazakov
2010-09-28 21:57       ` Maciej Sobczak
2010-09-29  6:03         ` Ludovic Brenta
2010-09-29  8:25           ` Maciej Sobczak
2010-09-29  7:51         ` Dmitry A. Kazakov
2010-09-29  8:38           ` Maciej Sobczak
2010-09-29  9:16             ` Dmitry A. Kazakov
2010-09-29 12:22               ` Maciej Sobczak
2010-09-29 13:41                 ` Dmitry A. Kazakov
2010-09-29 15:07                   ` Georg Bauhaus
2010-09-29 19:22                     ` Dmitry A. Kazakov
2010-09-29 20:51                   ` Maciej Sobczak
2010-09-29 21:18                     ` Dmitry A. Kazakov
2010-10-05  7:35                     ` Randy Brukardt
2010-10-08  8:05                       ` Maciej Sobczak
2010-10-09  6:29                         ` Randy Brukardt
2010-10-05  7:25             ` Randy Brukardt
2010-10-08  8:23               ` Maciej Sobczak
2010-10-09  6:13                 ` Randy Brukardt
2010-10-10 14:13                   ` Maciej Sobczak
2010-10-11  6:23                     ` Randy Brukardt
2010-10-12 19:29                       ` Maciej Sobczak
2010-10-12 20:19                         ` Dmitry A. Kazakov
2010-10-13  2:09                         ` Randy Brukardt
2010-10-13  8:44                           ` Georg Bauhaus
2010-10-15  0:59                             ` Randy Brukardt
2010-10-13  9:43                           ` Maciej Sobczak
2010-09-28 15:15     ` Ludovic Brenta
2010-09-28 22:04       ` Maciej Sobczak
2010-09-28 15:54   ` Robert A Duff
2010-09-30  7:27   ` Stephen Leake
2010-09-30  7:33     ` Ludovic Brenta
2010-09-30 16:03     ` Adam Beneschan
2010-10-07 11:55       ` Stephen Leake
2010-10-07 18:27         ` Martin Krischik
2010-10-07 21:30           ` Adam Beneschan
2010-10-09  6:29             ` Martin Krischik
2010-10-09 18:35               ` Robert A Duff
2010-10-08  0:07           ` Randy Brukardt
2010-10-09  6:21             ` Martin Krischik
2010-09-28  9:32 ` Vadim Godunko
2010-09-28 11:34 ` stefan-lucks
2010-09-28 13:15   ` stefan-lucks
2010-09-28 16:55 ` Adam Beneschan [this message]
2010-09-28 17:31   ` Robert A Duff
2010-09-28 19:24     ` Adam Beneschan
2010-09-28 20:32       ` Vadim Godunko
2010-09-28 21:32         ` Adam Beneschan
replies disabled

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