comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Ripple effect
Date: 07 Sep 2006 14:18:49 -0400
Date: 2006-09-07T14:18:49-04:00	[thread overview]
Message-ID: <wccslj34k1i.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: U5mLg.171961$1i1.102826@attbi_s72

"Jeffrey R. Carter" <spam.not.jrcarter@acm.not.spam.org> writes:

> Robert A Duff wrote:
> > I think I want something like Ada's "use".  Pascal calls it "with" (for
> > records, as opposed to packages).  It has nasty Beaujolais-like effects,
> > but that's not necessary.  One of the brilliant things Ichbiah did was
> > to eliminate Beaujolais effects.  Well, almost -- Ada 9X finished the
> > job.  And Ichbiah didn't go far enough in that regard -- I would
> > eliminate hiding entirely.
> 
> OK. I'm leaning the other way.

I suppose there are many other ways; I'm not sure which one you're
leaning toward.  ;-)  Surely not to increase Beaujolais-like effects!?

> Thanks for the description. Are you saying that only an open module can
> be opened by a client, but clients can not open a module and treated
> like a closed module?

I'm not sure.  The user can declare a module "open".  If you say
"use X", you get visibility on X (remember this is not Ada's "use").  If
X is open, you also get (direct) visibility on the contents of X.  The
part I'm not sure about is whether to _also_ provide something like
Ada's "use" clause, which allows clients of a non-open module to open
it.  It could work for records, too, like Pascal's "with" statement --
except that I would eliminate the nasty Beaujolais-like effects of
Pascal.

> > My thinking is that if B uses A in a visible way, C pretty-much has to
> > know about A.  E.g.:
> >     with A;
> >     package B is
> >         procedue Mumble(X: A.T);
> >     end B;
> > If C uses B.Mumble, it most likely needs to declare objects of type
> > A.T.
> > C certainly knows about type A.T!  So non-transitive with's cause a lot
> > of clutter -- C needs to 'with' everything it uses, plus everything
> > those things are (visibly) based on, transitively.  So high-level
> > packages tend to have so many with_clauses that nobody wants to read
> > them, largely defeating the purpose.
> 
> True, but we're talking about the case where B doesn't actually
> reference A (the with of A is "otherwise unneeded").

I guess I'm confused as to what the issue is, then.  If B doesn't
reference A, then it shouldn't import it -- and the compiler should
give a (suppressable) error.  Suppressable because you might want unused
imports temporarily during construction.  Also, there are some cases
where unused imports are needed.

> > OTOH, if B uses A only for implementation, that's a different story.
> > Then the import of A belongs on the body of B, and C shouldn't know
> > about it.  (My language doesn't have private parts.)
> 
> Agreed.
> 
> > By the way, the issue of bogus with_clauses is a real maintenance
> > problem -- nobody ever deletes a with_clause, so they tend to
> > accumulate.  This problem is easily solved.  The compiler should give an
> > error message.  An error that can be suppressed, so that you can
> > temporarily have bogus with_clauses during development.  That's
> > essentially what GNAT does, with appropriate warning switches.
> 
> My sediments exactly. In fact, I do delete unneeded withs when I find them.

Sure, so do I, but they're hard to find by hand.  Once when I turned on
the GNAT warning for unused with's on a program of about 200,000 lines,
I found hundreds and hundreds of them.

- Bob



  reply	other threads:[~2006-09-07 18:18 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-23 22:29 Ripple effect Jeffrey R. Carter
2006-08-24  9:21 ` Maciej Sobczak
2006-08-24 23:39   ` Jeffrey R. Carter
2006-08-25  7:03     ` Maciej Sobczak
2006-08-24 18:22 ` Adam Beneschan
2006-08-24 23:40   ` Jeffrey R. Carter
2006-09-04 13:52 ` Robert A Duff
2006-09-04 15:15   ` Jeffrey R. Carter
2006-09-04 18:06     ` Robert A Duff
2006-09-05  2:33       ` Jeffrey R. Carter
2006-09-05  7:23         ` Dmitry A. Kazakov
2006-09-05 16:28           ` Robert A Duff
2006-09-05 16:23         ` Robert A Duff
2006-09-05 21:36           ` Jeffrey R. Carter
2006-09-07 18:18             ` Robert A Duff [this message]
2006-09-08 22:02               ` Jeffrey R. Carter
2006-09-06  0:10           ` Randy Brukardt
2006-09-07 18:30             ` Robert A Duff
2006-09-07 21:21               ` Simon Wright
2006-09-08  2:08               ` Randy Brukardt
2006-09-09 14:55             ` adaworks
2006-09-05 23:52         ` Randy Brukardt
2006-09-07 19:09   ` Adam Beneschan
2006-09-07 19:21     ` Ed Falis
2006-09-07 19:46       ` Larry Kilgallen
2006-09-08 13:06         ` Ed Falis
replies disabled

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