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
next prev parent 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