comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: advice on package design
Date: 12 Mar 2005 16:59:26 -0500
Date: 2005-03-12T16:59:26-05:00	[thread overview]
Message-ID: <wccsm30ttj5.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 3jok3ghqqls8$.1rrsonb8jsurt$.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:

> On 12 Mar 2005 14:57:17 -0500, Robert A Duff wrote:
> 
> > If I were [re]designing Ada, I would make 'use' transitive. That is,
> > if Foo says "use Linked_List" that would make the contents of
> > Linked_List directly visible in Foo, and anything that says "use Foo;"
> > would have direct visibility on everything directly visible in Foo --
> > not just the things *declared* in Foo.  Or something like that.
> 
> Yes, I really miss it. What about:
> 
>    use all <package-name>;
> 
> or
> 
>   use package <package-name>;
> 
> with the effect importing the specification of the package? Also,
> differently to use, it should prevent hiding. So:
> 
> package A is
>    Foo (X : Integer);
> end A;
> 
> with A;
> package B is
>    use all A;
>    Foo (X : out Integer); -- Illegal, can't hide A.Foo
> end B;

Well, I happen to think that *all* hiding is evil.
I would make the above legal, but all calls to Foo would be ambiguous,
and therefore illegal.

Ichbiah defined "Beaujolais Effect" to mean that if you add a subprogram
to a use-d package, and that causes a legal program to change it's
meaning (to another legal program) you have a Beaujolais Effect.
And Beaujolais Effects are bad.  Ada 83 had some Beaujolais Effects,
but they were pretty obscure, and we eliminated them in Ada 95.

But I think he should have extended that definition to include all
visibility, not just use-visibility.  So a local X should not hide a
use-visible X, but be ambiguous with it.  And similar rules for record
(extension) components.

In Pascal, a 'with' statement opens up the visibility of the record
components, and if 'with R' is nested within some place where X is
declared, then record component X hides that X.  That's bad, and Ichbiah
wisely designed 'use' clauses to not do that bad thing.  The trick is to
avoid "preference rules", where one decl takes precedence over another.
But hiding is exactly a preference rule (preferring the inner one over
an outer one, or preferring an outer one over a use-visible one).

C++ is rife with Beaujolais Effects.

- Bob

P.S. The reason for the name is that Ichbiah offered to give a bottle
(or was it a case?) of Beaujolais to anybody who could find such a
problem in Ada.



  reply	other threads:[~2005-03-12 21:59 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-07 16:23 advice on package design spambox
2005-03-07 21:08 ` Dmitry A. Kazakov
2005-03-08 12:48   ` spambox
2005-03-08 17:18     ` Dmitry A. Kazakov
2005-03-12 19:57   ` Robert A Duff
2005-03-12 20:45     ` Dmitry A. Kazakov
2005-03-12 21:59       ` Robert A Duff [this message]
2005-03-13  9:23         ` Dmitry A. Kazakov
2005-03-16 20:41           ` Robert A Duff
2005-03-17 10:22             ` Dmitry A. Kazakov
2005-03-17 14:04               ` Robert A Duff
2005-03-17 15:59                 ` Dmitry A. Kazakov
2005-03-17 19:10                   ` Robert A Duff
2005-03-17 19:47                     ` Martin Dowie
2005-03-17 20:55                       ` Robert A Duff
2005-03-17 21:14                         ` Marius Amado Alves
2005-03-18  9:31                           ` Martin Dowie
2005-03-18  9:38                         ` Martin Dowie
2005-03-21 16:19                           ` Robert A Duff
2005-03-17 20:48                     ` Dmitry A. Kazakov
2005-03-17 21:26                       ` Robert A Duff
2005-03-18  3:06                         ` Jared
2005-03-18 10:00                         ` Dmitry A. Kazakov
2005-03-21 16:17                           ` Robert A Duff
2005-03-21 18:16                             ` Dmitry A. Kazakov
2005-03-21 20:35                               ` Robert A Duff
2005-03-22 10:55                                 ` Dmitry A. Kazakov
2005-03-17 23:23                 ` Randy Brukardt
replies disabled

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